如何在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 之前有一个制表符,s01 和 Jaggery 之间有一个制表符,e01 之前有两个制表符,e01 和 Egg 之间有一个制表符。该命令告诉 sed 仅对与 regexp 匹配的行进行操作^\ts01\tJaggery,将这些行与下一行 ( N) 连接,然后执行替换操作 ( s),其中包括制表符和换行符 as\t\n

相关内容