file.txt
たとえば、次の3行のコンテンツがあります。
hello
hello
hello
名前付き変数line=1
と文字列変数がありますsubstitute=hello1
。line
変数が説明する行の文字列を、新しい文字列変数に置き換えたいと思います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
バックスラッシュ、コマンド区切り文字、または改行文字を含めることができる場合は、その値に対していくつかの後処理を実行する必要があるため、sed
Perlと同様のオプションをサポートしていても、ここで使用するのは理想的ではありません。バラより-i
$substitute
&
s
「sed」置換に挿入された文字列がすべてのメタ文字をエスケープするかどうかを確認する方法詳細。
存在するgawk
、使用しないでください-i inplace
現在の作業ディレクトリから最初に拡張機能をgawk
ロードしようとすると、誰かがそのディレクトリにマルウェアを植えた可能性があります。システムに付属の拡張プログラムのパスは異なる場合があります。出力を参照してください。inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'