命令“sed 's~ ~~g'”中的“~”的作用是什么?

命令“sed 's~ ~~g'”中的“~”的作用是什么?

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

答案1

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

答案2

这是一个替换分隔符。最常用的分隔符是正斜杠/。但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'

这更清楚。

相关内容