
私のファイルには以下が含まれます。
パイナップル りんご バナナ 米 ブドウ スイカ オレンジ りんご バナナ 米 マンゴー 船 プラム バナナ 米 桜
私はこれを次のようにしたいと思います:
パイナップル りんご バナナ 米 ブドウ スイカ オレンジ りんご バナナ オリーブ マンゴー 船 プラム バナナ 米 桜
ここでは「Rice」を「Olive」に変更します。ただし、「Rice」が複数行パターンに従う場合にのみ、特に「Rice」が複数行パターンの後に表示される場合にのみ該当します。
オレンジ りんご バナナ
awk
、、、またはその他perl
のsed
ツールを使用する意思があります。
答え1
Perlはこれをとてもよく行います。
perl -0pe 's/Orange\nApple\nBanana\n\KRice/Olive/' input.txt
正規表現を練習してテストできます。正規表現 101。
答え2
考えられる解決策の1つ:
paste -d' ' -s myfile \
| sed 's/\(Orange Apple Banana\) Rice/\1 Olive/g' \
| tr ' ' '\n'
説明する:
paste -d' ' -s myfile
各行を取る。私のファイル区切り文字(スペース)で区切って連続して(つまり、1行に)貼り付けます。 1行に1単語を入力する代わりに、1行にすべての単語を入力できます。
sed 's/\(Orange Apple Banana\) Rice/\1 Olive/g'
入力を検索し、「オレンジりんごバナナライス」が出るたびに、「オレンジリンゴバナナオリーブ」に置き換えます。
tr ' ' '\n'
入力のすべての空白文字を改行に変換して、1行の入力を1行に1語ずつ元の形式に変換します。