我正在尝试创建一个脚本,该脚本将amnog其他东西启用sources.list(Ubuntu)中的源存储库。您可能知道也可能不知道存储库文件的格式是这样的:
deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
# deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted
# etc.
因此,我想启用源代码存储库(使用 deb-src 取消注释行),但仅限于那些前面带有未注释的 deb 行的代码。 GNU sed应该是完美的,但我无法完成这项工作。 这就是我现在所拥有的:
sed -i 's/^# deb-src/deb-src/gm' /etc/apt/sources.list
我想要的是这样的东西,但它应该只替换注释行而不是所有内容:
sed -i 's/^deb .*$^# deb-src/deb-src/gm' /etc/apt/sources.list
那么有没有一种方法可以使 sed 的正则表达式仅替换匹配字符串的一部分?
最佳答案
除了 -r
之外,还使用 -z
:
sed -rz -i 's/^(deb .*\s+)^# deb-src/\1deb-src/gm' /etc/apt/sources.list
捕获组是必要的,以便在替换时引用它们。
关于regex - sed 需要正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48925812/