私はスクリプトの変更を永続的に(1行のみ)変更する必要があるため、ある時点でそれ自身を変更する必要があるbashスクリプトを作成しています。私が知っているsed -i
ダイを試さずに多相bashを作成します。 Sedの置き換え
は、私がこれを行うために必要なものです。問題は私のsedコマンドが、私が望む行の代わりにコマンドが格納されている行を置き換えていることです。だから私は交換の間に除外を含める必要があると思う。のは、スニペットコードのものを確認してみましょう:
#!/bin/bash
echo "blah,blah,blah"
echo "more code here, not matters"
sed -i "s/#Awesome line to be replaced/#New line here/" "/path/to/my/script" 2> /dev/null
#Awesome line to be replaced
echo "blah,blah,blah, more code blah"
ここでの問題は、置き換えラインのみ#Awesome line to be replaced
とラインではないです。これは、sedコマンドがある行と置き換えられます。
これは減少した例であるが、このスクリプトは、多型と、おそらく行番号の変更なので、それは行番号に基づいてすることはできません。そして、このようなsedコマンドが増えるでしょう...だから、パターンを除外するためにsedコマンドラインにいつもあるテキストを入れるのはいいと思っていました。そのテキスト部分は/dev/null
です。常にsedコマンドラインに置かれ、置き換えたい行には決して置かれません。 sed -i
を使ってこれを実現するにはどうすればよい
?前もって感謝します。
EDIT多態性のために外観の順序(オフセット)を使用することはできません。
EDIT2#Awesome line to be replaced
より前の先頭の文字は、変更する可能性があるため使用できません。これに基づいて既に答えた人のために申し訳ありません。すべての可能性を考慮して多態的なスニペットを書くのは複雑です。
いかが 'sedの-i "S/^#素晴らしいラインここに/#新しいラインを交換する/" "/パス/に/私/スクリプト" 2>は/ dev/NULL''^'前に注意してください文字列を見つけてください... – anishsane
例のために私が間違っていたので、それがうまくいくかどうかは分かりません。 – OscarAkaElvis
検索文字列を '^ [\ t] *#置き換えられるべき行に変更するか' ^#[\ t] *必要に応じて置き換えられるべき素晴らしい行... – anishsane