我需要在单个文件的以PATTERN
开头的所有行的末尾附加一个包含在$http_proxy
env var中的URL(http://localhost:3128
)。
$ sed "/^PATTERN/ s/.*/& test/" somefile
它工作得很好,但一旦我用$http_proxy
替换test
,sed就会因为其中的//
而抱怨:
$ sed "/^PATTERN/ s/.*/& $http_proxy/" somefile
sed: -e expression #1, char 25: unknown option to `s'
所以我尝试使用#
作为分隔符(例如这里建议的),但sed
没有任何效果,就像模式突然不再匹配一样:
$ sed "#^PATTERN# s#.*#& $http_proxy#" somefile
知道吗?
仅在s///
部分中使用不同的sed分隔符。ypy不需要将&
放在替换部分中,因为您试图在最后添加字符串,替换行$
的末尾就足够了。
sed "/^PATTERN/s~$~ $http_proxy~" somefile
使用不受分隔符或变量内容影响的工具:
$ cat file
foo bar
PATTERN here
some line
$ awk -v pxy="$http_proxy" '/^PATTERN/{$0=$0" "pxy} 1' file
foo bar
PATTERN here http://localhost:3128
some line
显然,在这种情况下,第一个分隔符必须以:开头
$ sed "#^PATTERN# s#.*#& $http_proxy#" somefile
确实解决了这个问题。