首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“S~g”命令中"~“的目的是什么?

“S~g”命令中"~“的目的是什么?
EN

Unix & Linux用户
提问于 2018-05-11 07:52:36
回答 2查看 8.9K关注 0票数 30

我在Linux系统上的shell脚本中找到了行sed 's~ ~~g'。这是什么~

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-05-11 08:11:22

它是sed替换(s)命令的另一个分隔符。通常使用斜杠,就像在s/pattern/replacement/中一样,但是sed允许使用几乎任何字符。

/替换表达式中使用比sed更多的分隔符的主要原因是,表达式何时对文字/字符起作用。

例如,要将路径/some/path/here替换为/other/path/now,可以这样做。

代码语言:javascript
运行
复制
s/\/some\/path\/here/\/other\/path\/now/

这会受到通常所称的“倾斜牙签综合征”的影响,这意味着很难阅读和正确维护。

相反,我们可以使用另一个表达式分隔符:

代码语言:javascript
运行
复制
s#/some/path/here#/other/path/now#

使用~只是一个有效的替换表达式分隔符的另一个例子。

你的表情

代码语言:javascript
运行
复制
s~ ~~g

是相同的

代码语言:javascript
运行
复制
s/ //g

并将从输入中删除所有空格。在这种情况下,根本不需要使用比/更多的分隔符,因为模式和替换都不包含/

做同样的事情的另一种方法是

代码语言:javascript
运行
复制
tr -d ' ' <infile >outfile
票数 54
EN

Unix & Linux用户

发布于 2018-05-11 08:04:36

它是一个替换分隔符。最常用的分隔符是正斜杠/。但是sed可以使用任何字符作为分隔符-它将自动使用s后面的字符作为分隔符:

代码语言:javascript
运行
复制
sed 's@ @@g'
sed 's+ ++g'
sed 's\ \\g'
sed 's* **g'

此外,还可以使用空格作为分隔符:

代码语言:javascript
运行
复制
echo "foo" | sed 's foo bar g'

当命令中有许多斜杠时,在语法中出现混乱时,通常使用/以外的其他分隔符。考虑这样的情况,我们希望将多个空格转换为一个空格字符:而不是

代码语言:javascript
运行
复制
echo "    a   b  c  " | sed 's/\s\{1,\}/ /g'

你可以跑

代码语言:javascript
运行
复制
echo "    a   b  c  " | sed 's~\s\{1,\}~ ~g'

这就更清楚了。

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

https://unix.stackexchange.com/questions/443146

复制
相关文章

相似问题

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