次の内容のテキストファイル( "file.txt")があります。
# disutil_screening = 0.00000; # favorable
disutil_screening = 0.00009; # base
# disutil_screening = 0.00019; # unfavorable
GNU Sedを使用して、これらの3行(「favorable」、「base」、または「unfavorable」のいずれか)のどれをコメントアウトするかを切り替える必要があります。
「好ましい」行を次のようなコードと一致させることができることを知っています(ダミーの例として、テキストを「aaa」に置き換えるだけです)。
$ cat file.txt | sed -r 's/#[\t]disutil_screening[\ =0-9\.;]+# favorable/aaa/'
aaa
disutil_screening = 0.00009; # base
# disutil_screening = 0.00019; # unfavorable
ただし、このSedステートメントの例は、私が実際に望んでいるものとは明らかにかけ離れています。先頭の「#」を削除するだけのSed式が必要です。つまり、$EXPR
上記の「file.txt」の内容が次のように変更されるようなSed式()が必要です。
$ cat file.txt | sed -r $EXPR
disutil_screening = 0.00000; # favorable
disutil_screening = 0.00009; # base
# disutil_screening = 0.00019; # unfavorable
これを行う方法(「好ましい」行の先頭の「#」を「」に置き換える)がわかれば、「ベース」行に「#」を追加する方法(つまり、コメントアウト行)を理解できると思います。現在コメントアウトされていません)。
注:私はsedの代わりにawkをこのタスクに使用することにオープンですが、awkに少し怖がっており、これまで使用したことがありません。