sed:如何用可变字符替换一行?

时间:2013-10-25 22:47:32

标签: linux bash shell sed

我是sed Linux命令的初学者。现在我在文件中有一行:

exten => *97,ttttt

我想将这一行替换为两行:

exten => *97,aaaaa
exten => *97,bbbbb

如果原始文本是静态的,我可以编写这样的命令来替换行:

sed -e 's/,ttttt/,aaaaa\nexten => *97,bbbbb/' -i xxxx.txt

但不知何故,文件xxxx.txt是由脚本生成的,因此*97可能会成为*95或其他内容,所以下次xxxx.txt可能是这样的:

exten => *95,ttttt

这次我必须用这两行替换它:

exten => *95,aaaaa
exten => *95,bbbbb

在这种情况下,我无法执行上面的sed命令,因为它会将*97写入第二行。

有没有一种方法我不需要每次都重写sed命令,但也可以正确地完成工作?

2 个答案:

答案 0 :(得分:2)

尝试保存所有数据,直到第1组中的数字和第2组中的数字。然后用它们后面的不同字符串替换它两次,并且它们之间也有换行符:

sed -e 's/^\(.*\)\(\*[0-9]\+\).*$/\1\2,aaaaa\n\1\2,bbbbb/' infile

它产生:

exten => *97,aaaaa
exten => *97,bbbbb

答案 1 :(得分:1)

它要求sed解决方案,但也可以使用awk

完成
echo "exten => *97,ttttt" | awk -F, '{print $1 ",aaaaa\n" $1 ",bbbbb"}'
exten => *97,aaaaa
exten => *97,bbbbb

sed中的复杂语法相比,它可能更容易理解 使用,-F,分为两部分的字符串 然后使用aaaaa和新行\n首先打印 所以第一部分再次使用bbbbb