オリジナルファイル
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|heloo good morning everyone|1|123|abc|123|abc
置き換えられたファイル
123|abc|heloo good morning freinds|1|123|abc|123|abc
123|abc|this is what i want to see|1|123|abc|123|abc
ご覧のとおり、区切り記号はです|
。ブロックに「Everyone」という単語が含まれている場合は、その特定のブロックを「私が見たいものは次のとおりです」に変更する必要があります。
答え1
フィールドを繰り返しながら一致することを確認してください。
awk 'BEGIN{FS=OFS="|"}
{for (i=1; i<=NF; i++)
if ($i ~ "everyone") $i="this is what i want to see"
print}' file
出力を表示します。
$ awk 'BEGIN{FS=OFS="|"} {for (i=1; i<=NF; i++) if ($i ~ "everyone") $i="this is what i want to see"; print}' file
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|this is what i want to see|1|123|abc|123|abc
より慣用的な方法でif
条件を次のように作成し、実際の($i ~ "everyone") && $i="this is what i want to see"
条件を使用してその行を印刷できます。
awk 'BEGIN{FS=OFS="|"} {for (i=1; i<=NF; i++) ($i ~ "everyone") && $i="this is what i want to see"} 1' file
答え2
sed 's/[^|]*everyone[^|]*/this is what I want to see/g' <<\DATA
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|heloo good morning everyone|1|123|abc|123|abc
DATA
出力
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|this is what I want to see|1|123|abc|123|abc
これは次の項目と一致します。みんな区切り文字を除いて、左右のフルシーケンス|。したがって、上記の方法が機能します。しかしそれはまた本当である:
sed 's/[^|]*everyone[^|]*/replace/g' <<\DATA
everyone|everyevery|every|one|
everyone|everyone|heloo good morning everyone|everyone|123|abc|123|abc
DATA
出力
replace|everyevery|every|one|
replace|replace|replace|replace|123|abc|123|abc