sedを使用して特定の行を文字列変数に置き換えるには?

sedを使用して特定の行を文字列変数に置き換えるには?

file.txtたとえば、次の3行のコンテンツがあります。

hello
hello
hello

名前付き変数line=1と文字列変数がありますsubstitute=hello1line変数が説明する行の文字列を、新しい文字列変数に置き換えたいと思いますsubstitute

最終変更はfiles.txt次のとおりです。

hello1
hello
hello

これを行うにはどうすればよいですかsed?またはawk?それがあなたが望むものであれば、whileループで変更できる変数を入力します。

ベストアンサー1

そしてperl

export line substitute
perl -pi -e '$_ = $ENV{substitute} . "\n" if $. == $ENV{line}' file.txt

GNUと同じawk

export line substitute
gawk -i /usr/share/awk/inplace.awk '
  NR == ENVIRON["line"] {$0 = ENVIRON["substitute"]}
  {print}' file.txt

バックスラッシュ、コマンド区切り文字、または改行文字を含めることができる場合は、その値に対していくつかの後処理を実行する必要があるため、sedPerlと同様のオプションをサポートしていても、ここで使用するのは理想的ではありません。バラより-i$substitute&s「sed」置換に挿入された文字列がすべてのメタ文字をエスケープするかどうかを確認する方法詳細。

存在するgawk使用しないでください-i inplace現在の作業ディレクトリから最初に拡張機能をgawkロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

おすすめ記事