Linuxでファイル内のすべての複数行文字列を他の複数行文字列に置き換える方法

Linuxでファイル内のすべての複数行文字列を他の複数行文字列に置き換える方法

次の内容を含む products.txt ファイルがあります。

ID      Name
w01     Whipped cream
c01     Cocoa Powder
    s01     Jaggery
        e01     Egg
f05     Flour
xxxxxxx
xxxxxxxxxxx
xxxxxxxxxxx
    s01     Jaggery
        e01     Egg
f05     Flour
xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
    s01     Jaggery
        e01     Egg
f05     Flour
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx

次のテキストを置き換える必要があります。

    s01     Jaggery
        e01     Egg

そして -

            something
    else

行の先頭と途中のタブを確認してください。

awkまたはsedを使用して上記の問題の解決策を見つけるのを助けてくれてありがとう。

ありがとうございます!

ベストアンサー1

sedを使用すると、Nコマンドを使用して行をリンクし、複数の行を操作できます(例:sを使用して検索して置換するなど)。式は\tタブと\n改行文字を使用します(行をN

例:

sed -e'/^\ts01\tJaggery/N;s/\ts01\tJaggery\n\t\te01\tEgg/\t\tsomething\n\telse/'

上記では、s01の前に1つのタブ文字、s01とJaggeryの間に1つのタブ文字、e01の前に2つのタブ文字、e01とEggの間に1つのタブ文字があるとします。このコマンドは、sedにregexpに一致する行でのみ機能し、その^\ts01\tJaggeryNを次の行()に関連付けてから、などのsタブや改行文字を含む置換操作()を実行するように指示します。\t\n

おすすめ記事