在文件的某些行的末尾附加一个包含在env-var中的URL



我需要在单个文件的以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

确实解决了这个问题。

最新更新