首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >差异sed命令sed‘s//’和sed "s###“

差异sed命令sed‘s//’和sed "s###“
EN

Stack Overflow用户
提问于 2017-02-19 07:47:56
回答 3查看 5.6K关注 0票数 1

我想问两个关于sed的问题。

例如,当我试图将包含特殊字符(如(.\n*.+)和sed )的字符串放入sed时,它无法正常运行。

代码语言:javascript
复制
set a = ".\n*.\+"
set input = ".\n*.\+adsdfasdf"

然后执行:

代码语言:javascript
复制
echo "$input" | sed 's/'$a'/hi/g' # It will give: sed: No match

代码语言:javascript
复制
echo "$input" | sed "s#${a}#hi#g" # It will run but not true

我的问题是:

  1. 这些命令之间有什么区别: sed‘s/’和sed "s###“
  2. 如何处理输入就像它是纯字符串?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-19 08:11:54

1.这些命令的区别是: sed‘s/’和sed "s###“

--在你的例子中,/#是关键“部分”的分隔符:

命令(作为替代命令)可能是sed中最重要的命令,并且有许多不同的选项。S命令的语法是‘s/regexp/replacement/flags’.。 ..。 /字符可以统一地被任何给定的s命令中的任何其他单个字符替换。

2.如何将输入视为纯字符串?

--为了在sed命令中展开/内插一个变量,这些变量或整个表达式应该用双引号括起来。

代码语言:javascript
复制
set a = ".\n*.\+"
echo "$input" | sed "s/$a/hi/g"
票数 0
EN

Stack Overflow用户

发布于 2017-02-20 05:25:56

那么,输入字符串中有一个\n,在's/'$a'/hi/g'中没有引号分隔符,并且被解析为空格,因此实际上将两个参数传递给sed(1),并且只在"s#$a#hi#g"中的一个参数(双引号包括变量替换)中替换为一个参数(包含\n作为一个字符)。实际上,在sed(1)中用作分隔符的字符并没有什么不同,但是在这两个调用中,您对它的调用不同。

票数 0
EN

Stack Overflow用户

发布于 2017-02-19 08:57:55

最后,我发现分隔符必须是与字符串中的任何字符不同的!否则就会造成错误!

因此,现在我将分隔符更改为#。就像评论人物。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42324854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档