我想问两个关于sed的问题。
例如,当我试图将包含特殊字符(如(.\n*.+)和sed )的字符串放入sed时,它无法正常运行。
set a = ".\n*.\+"
set input = ".\n*.\+adsdfasdf"然后执行:
echo "$input" | sed 's/'$a'/hi/g' # It will give: sed: No match但
echo "$input" | sed "s#${a}#hi#g" # It will run but not true我的问题是:
发布于 2017-02-19 08:11:54
1.这些命令的区别是: sed‘s/’和sed "s###“
--在你的例子中,/或#是关键“部分”的分隔符:
的命令(作为替代命令)可能是sed中最重要的命令,并且有许多不同的选项。S命令的语法是‘s/regexp/replacement/flags’.。 ..。 /字符可以统一地被任何给定的s命令中的任何其他单个字符替换。
2.如何将输入视为纯字符串?
--为了在sed命令中展开/内插一个变量,这些变量或整个表达式应该用双引号括起来。
set a = ".\n*.\+"
echo "$input" | sed "s/$a/hi/g"发布于 2017-02-20 05:25:56
那么,输入字符串中有一个\n,在's/'$a'/hi/g'中没有引号分隔符,并且被解析为空格,因此实际上将两个参数传递给sed(1),并且只在"s#$a#hi#g"中的一个参数(双引号包括变量替换)中替换为一个参数(包含\n作为一个字符)。实际上,在sed(1)中用作分隔符的字符并没有什么不同,但是在这两个调用中,您对它的调用不同。
发布于 2017-02-19 08:57:55
最后,我发现分隔符必须是与字符串中的任何字符不同的!否则就会造成错误!
因此,现在我将分隔符更改为#。就像评论人物。
https://stackoverflow.com/questions/42324854
复制相似问题