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

时间:2015-02-06 10:56:07

标签: regex sed

我需要在http://localhost:3128 env var中添加一个URL($http_proxy),该URL位于以单个文件的PATTERN开头的所有行的末尾。

$ sed "/^PATTERN/ s/.*/& test/" somefile

效果很好,但只要我用test替换$http_proxy,sed会因为其中的//而抱怨:

$ sed "/^PATTERN/ s/.*/& $http_proxy/" somefile
sed: -e expression #1, char 25: unknown option to `s'

所以我尝试使用#作为分隔符(例如建议的here),但是sed没有任何效果,就像模式突然不匹配一样再说:

$ sed "#^PATTERN# s#.*#& $http_proxy#" somefile

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

仅在s///部分中使用其他sed分隔符。并且ypy不需要将&放在替换部分中,因为您尝试在最后添加字符串,替换行$的末尾就足够了。

sed "/^PATTERN/s~$~ $http_proxy~" somefile

答案 1 :(得分:1)

使用不受分隔符或可变内容影响的工具:

$ 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

答案 2 :(得分:0)

Apparently在这种情况下,第一个分隔符必须以\开头:

$ sed "\#^PATTERN# s#.*#& $http_proxy#" somefile

确实解决了这个问题。