1

我是sedon 命令的初学者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每次都重写命令但也可以正确地完成工作?

4

2 回答 2

2

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

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

它产生:

exten => *97,aaaaa
exten => *97,bbbbb
于 2013-10-25T23:03:18.997 回答
1

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

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

与将sed
字符串分成两部分通过,using -F,
Then print first past with aaaaaand a new line \n
So first part again withbbbbb

于 2013-10-26T07:37:54.297 回答