sedコマンドを使用して、特定の行の文字列を特定の文字列に変更します。

sedコマンドを使用して、特定の行の文字列を特定の文字列に変更します。

ファイル内の文字列に「test」という文字列が含まれている場合、4行目のみsedを使用して文字列を変更する必要があります。

つまり、私が今得たものは次のとおりです。

sed '/test/ s/abc/zz/g' sample

これは基本的に行を調べてテストがあるかどうかを確認し、その行にある場合は abc を zz に変更します。

しかし、4行目だけの場合はどうすればよいでしょうか。

私は試した

 sed '/test/ 4s/abc/zz/g' sample

s の前に 4 を追加しても機能しません。

答え1

一方通行:

sed -e '4 {
  /test/s/abc/zz/g
}' <file

答え2

よく分かりませんが、このようなものが機能するでしょうか?

awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'

答え3

別の方法:

まず、文字列「test」を含む行を見つけます。

LINE=$(grep "テスト" ファイル -n | awk '{print $1}' | cut -d ':' -f1 | xargs)

次に、その変数 LINE を使用して次の操作を実行します。

sed "s$LINEs/abc/zzz/g" ファイル

答え4

これを使えば

sed -i '4s/old_text/new_text/g' file_name

関連情報