搜索和替换(多行)

时间:2018-08-25 14:49:19

标签: linux bash shell unix replace

Hello StackOverflow社区!

我正在使用 bash 脚本来更改 Dynamic 文本文件,我想用一行替换多行。

例如:

此示例,我要替换

CCCCC 
DDDDD

使用KKKKK

脚本之前

AAAAA
CCCCC
DDDDD
BBBBB
CCCCC
DDDDD
CCCCC

脚本后

AAAAA
KKKKK
BBBBB
KKKKK
CCCCC

我找到了一个用(sed替换的脚本,但是它不能替换多行。

注意:我是脚本编写的初学者,所以请解释一下如何轻松完成:)

2 个答案:

答案 0 :(得分:0)

您要查找的sed表达式如下:

sed -e '/CCCCC/{N;s/CCCCC\nDDDDD/KKKKK/}'

这是做什么的?

只要与正则表达式sed匹配,它就会命令CCCCC执行大括号分隔的命令块(您可能更喜欢用^CCCCC$代替)

无论何时执行上述块,它要做的第一件事就是将下一行添加到模式空间。然后它只执行替换命令。

另请参阅the answers to this question in the UNIX & Linux StackExchange community

请注意,更多N;命令可在图案空间中添加更多行。

例如:

sed -e '/CCCCC/{N; N; s/CCCCC\nDDDDD\nBBBBB/KKKKK/}'

答案 1 :(得分:0)

您可以这样做

tr '\n' ' ' < yourText.txt | sed "s/CCCCC DDDDD/KKKKK/g" | tr -s ' ' '\n'

要保存它,只需在上述命令的末尾添加> another.txt