我是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
命令,但也可以正确地完成工作?
答案 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