sedを使用してパターンを検索し、その行の他の部分文字列に置き換える方法

sedを使用してパターンを検索し、その行の他の部分文字列に置き換える方法

NO_IDを含むデータファイルのすべての行を見つけて、「確認済み」文字列を「確認保留中」に置き換える必要があります。

私はこれを試しました:

sed '/NO_ID/, s/confirmed/to be confirmed/' stats.txt

これはうまくいかないようです。

答え1

カンマを削除してください。初期正規表現はs後続のコマンドの「アドレス」として機能します(ここに示されているアドレスとコマンドの間のスペースはオプションです)。

sed '/NO_ID/ s/confirmed/to be confirmed/' stats.txt

confirmedコマンドの正規表現に一致する単語に単語を置き換えると、さらに短縮できます。s

sed '/NO_ID/ s/confirmed/to be &/' stats.txt

to be confirmed含まれている行が変更されていないことを確認する必要がある場合:

sed '/NO_ID/ { /to be confirmed/!s/confirmed/to be &/; }' stats.txt

または、

sed -e '/to be confirmed/b' -e '/NO_ID/ s/confirmed/to be &/' stats.txt

ここで、最初のコマンドは最初に含まれている行を検出し、NO_IDその行にto be confirmed。 2番目のコマンドは含まれている行を検出してスキップしますto be confirmedbコマンドはスクリプトの最後に移動し、追加の変更なしでその行が印刷されるようにします)。含まれていない行はto be confirmed元のコマンドと同じように変更されます。

答え2

このように:

sed '/NO_ID/ s/confirmed/to be confirmed/' stats.txt
#          ^

ここにカンマはありません

関連情報