テキストファイルの1行内で特定の文字列を置き換える方法

テキストファイルの1行内で特定の文字列を置き換える方法
$ cat text.txt
my name is Steven
my age is 10
i like dogs

どのコマンドがより適切で置き換えられecho "Kate"ますか?Steventext.txt

答え1

必ず次のようにecho "Kate"使用する必要がある場合awk

echo "Kate" | awk 'NR==FNR{a=$0;next} sub("Steven", a, $0)1' - file
  • 標準入力Kateはから来てにecho "Kate"パイプされますawk
  • awk次に標準入力(-)を読みます。NR==FNR最初のファイルが処理されている間(stdin)条件はtrueです。変数はaこの値に設定されます。
  • fileその後、入力が処理され、値にsub()置き換えられます。Stevena
  • これはsub()1ステートメントのパターンであり、置換が発生したかどうかにかかわらず常に true を返します。同等のアクションがないため、{ print }交換後に各行が印刷されます。

しかし、より良い方法はを使用することですsed

sed 's/Steven/Kate/' file

ファイルを適切に変更するには、次のようにします。

sed -i 's/Steven/Kate/' file

関連情報