テキストの先頭と末尾に一致するテキストを追加する方法$
入力例:
$ hello
$ yes
r no change
ファイルの先頭と末尾にテキストを追加して一致させたいです$
。出力が欲しいです。
start $ hello end
start $ yes end
r no change
答え1
別のsed
方法:
sed '/^\$/ s/.*/start & end/' infile
sed
はの一致パターン部分の&
逆参照ですs/<pattern>/<replace>/
。
以下を使用してawk
同じことを実行することもできます。
awk '/^\$/{ $0="start " $0 " end" }1' infile
inはawk
現在の$0
レコード/行を表します。レコード/行はawkの組み込み関数によって区別されますRS
(右エココードSeparator)変数、デフォルトは\n
ewlineです。 awkがレコードを読み取るときに設定する組み込み変数のデフォルトのいくつかを見てみましょう。
awk -d- '0' <<<'1'
awkは2つの部分で構成されcondition { action }
、そのうちの少なくとも1つはawkコマンドになければなりません。
私たちの条件はこれです模様つまり/^\$/
、^
ドルで始まり、likeがレコードが始まるアンカーであり、レコードが終わるアンカーである\$
ため、エスケープします。^
$
レコードの周囲に固定文字列を追加してレコードを更新し、$0="start " $0 " end"
再作成します。start
end
$0
/pattern/ { action }1
ここで、1
isは実際にaekのデフォルトの印刷ジョブを有効にする常にtrue条件です。結果が true で印刷ジョブをトリガーする条件を作成できます。
awk '/pattern/ { action }; 1!=0'
awk '/pattern/ { action }3'
...
print
あるいは、ジョブ自体を使用することもできます。
awk '/pattern/ { action }; { print }'
答え2
$ sed '/^\$/{s/^/start /; s/$/ end/;}' abc.txt
start $ hello end
start $ yes end
r no change