我在Linux系统上的shell脚本中找到了行sed 's~ ~~g'
。这是什么~
?
发布于 2018-05-11 00:11:22
它是sed
替换(s
)命令的另一个分隔符。通常使用斜杠,就像在s/pattern/replacement/
中一样,但是sed
允许使用几乎任何字符。
在/
替换表达式中使用比sed
更多的分隔符的主要原因是,表达式何时对文字/
字符起作用。
例如,要将路径/some/path/here
替换为/other/path/now
,可以这样做。
s/\/some\/path\/here/\/other\/path\/now/
这会受到通常所称的“倾斜牙签综合征”的影响,这意味着很难阅读和正确维护。
相反,我们可以使用另一个表达式分隔符:
s#/some/path/here#/other/path/now#
使用~
只是一个有效的替换表达式分隔符的另一个例子。
你的表情
s~ ~~g
是相同的
s/ //g
并将从输入中删除所有空格。在这种情况下,根本不需要使用比/
更多的分隔符,因为模式和替换都不包含/
。
做同样的事情的另一种方法是
tr -d ' ' <infile >outfile
发布于 2018-05-11 00:04:36
它是一个替换分隔符。最常用的分隔符是正斜杠/
。但是sed
可以使用任何字符作为分隔符-它将自动使用s
后面的字符作为分隔符:
sed 's@ @@g'
sed 's+ ++g'
sed 's\ \\g'
sed 's* **g'
此外,还可以使用空格作为分隔符:
echo "foo" | sed 's foo bar g'
当命令中有许多斜杠时,在语法中出现混乱时,通常使用/
以外的其他分隔符。考虑这样的情况,我们希望将多个空格转换为一个空格字符:而不是
echo " a b c " | sed 's/\s\{1,\}/ /g'
你可以跑
echo " a b c " | sed 's~\s\{1,\}~ ~g'
这就更清楚了。
https://unix.stackexchange.com/questions/443146
复制