sourabh malavade Asked: 2018-05-11 23:52:36 +0800 CST2018-05-11 23:52:36 +0800 CST 2018-05-11 23:52:36 +0800 CST 命令“sed 's~ ~~g'”中的“~”的目的是什么?[复制] 772 我sed 's~ ~~g'在 Linux 系统上的 shell 脚本中找到了行。这是什么~? sed 2 个回答 Voted Best Answer Kusalananda 2018-05-12T00:11:22+08:002018-05-12T00:11:22+08:00 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 并将删除输入中的所有空格。/在这种情况下,根本不需要使用另一个分隔符 than因为模式和替换都不包含/. 另一种做同样事情的方法是 tr -d ' ' <infile >outfile manifestor 2018-05-12T00:04:36+08:002018-05-12T00:04:36+08:00 这是一个替换分隔符。最常用的分隔符是正斜杠/。但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' 这更清楚。
sed
它是替代 (s
) 命令的替代分隔符。通常使用斜线,如s/pattern/replacement/
,但sed
允许使用几乎任何字符。/
在替换表达式中使用另一个分隔符的主要原因sed
是表达式将作用于文字/
字符。例如,要将路径替换为
/some/path/here
,/other/path/now
可以这样做这患有通常所说的“倾斜牙签综合症”,这意味着它很难阅读和正确维护。
相反,我们可以使用另一个表达式分隔符:
使用
~
只是有效替换表达式分隔符的另一个示例。你的表情
是相同的
并将删除输入中的所有空格。
/
在这种情况下,根本不需要使用另一个分隔符 than因为模式和替换都不包含/
.另一种做同样事情的方法是
这是一个替换分隔符。最常用的分隔符是正斜杠
/
。但sed
可以使用任何字符作为分隔符 - 它会自动使用后面的字符s
作为分隔符:也可以使用空格作为分隔符:
/
当您在语法中的命令中有许多斜杠时最常使用的其他定界符会变得令人困惑。考虑这种情况,我们希望将多个空格转换为一个空格字符: 而不是你可以跑
这更清楚。