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

标签 linux bash shell sed

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

exten => *97,ttttt

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

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

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

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

但不知何故,文件 xxxx.txt 是由脚本生成的,所以 *97 可能变成 *95 或其他东西,所以下一个time xxxx.txt 可能是这样的:

exten => *95,ttttt

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

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

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

有没有一种方法既不需要每次都重写 sed 命令又可以正确完成工作?

最佳答案

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

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

它产生:

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

关于linux - sed:如何用可变字符替换一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600558/

相关文章:

c++ - 如何在 Linux/POSIX 中获取任意时区的信息?

mongodb - 如何在不访问 Ubuntu 16.10 中的 Mongo shell 的情况下设置 featureCompatibilityVersion?

android - 在 Windows 上,如何在 shell 后台运行程序,并在程序运行时关闭 shell?

macos - 从 shell 脚本或命令行写入 Mac OS X 控制台日志

git - 如何遍历所有 Git 存储库并更新它们?

shell - 如何列出不包含两个不同字符串的所有文件

regex - 如何使用python脚本在linux中压缩多个文件?

linux - nginx 无需 sudo 运行或自动输入密码不需要我输入

php - Socket发送终端输入的数据