在sed命令中逃避字符混淆

时间:2014-08-01 03:42:10

标签: shell sed escaping

有一种常见的用法是逃避。 sed 's/\\\. / \\\\\\\\./g'
我很困惑为什么这么多\

3 个答案:

答案 0 :(得分:1)

解码转义序列的最简单方法是将它们分成对(一个斜杠,另一个是连接它的字符。)然后你可以单独评估这些对。但是\\用于表示输出中的单斜杠。

一些例子是:

a \ - Append
i \ - Insert
s/..../..../ - Substitute


Sed Pattern Flags
/g - Global
/I - Ignore Case
/p - Print
/w filename - Write Filename

进一步参考视图: http://www.grymoire.com/unix/sed.html

答案 1 :(得分:1)

没有明显的理由为什么这对模式是可取的,但它的作用是寻找反斜杠,点和空格,并用空格,四个反斜杠和一个点替换该序列;所有这些都是针对原始输入中的每个反斜杠,点,空格序列完成的。

替换命令是:

s/\\\. / \\\\\\\\./

在substitute命令的第一部分中,匹配部分:

  • 你有一对反斜杠;这些匹配一个反斜杠。
  • 你有一个反斜杠点对;这些匹配一个点(通常,一个点匹配任何字符,因此反斜杠会暂停特殊元字符对于点的含义)。
  • 你有空间。

在替换命令的第二部分,替换部分:

  • 你有空间。
  • 您有四对反斜杠,每个反斜杠都会替换一个反斜杠。
  • 你有一个点。

但是除了测试你在sed中编写正则表达式的能力之外,没有明显的理由说明这是一个合适的替代。

请注意,因为sed脚本表达式在单引号内,所以shell不会对字符串的内容进行任何解释。如果它用双引号括起来,那么shell将处理参数,并在sed看到表达式之前删除五个反斜杠,导致对正在发生的事情的不同解释。这是在可能的情况下在正则表达式周围使用单引号的一个很好的理由。

答案 2 :(得分:1)

/\\\. /

搜索模式\。

默认情况下,

是转义后跟char和dot意味着"任何char",所以\的顺序。通过转义斜杠(\\)后跟转义点(\。)

以正则表达式格式转换

/ \\\\\\\\./

替换为\\。 有8个斜线和1个点。 因为早期研究模式的原因与研究模式相同的原因有4个转义斜线,但是替换模式中的点是平均点,因此无需逃避它。

另一种写作方式 /[\][.]/\\\\\\&/ 或者为了好玩 /\([\]\)[.]/\1\1\1&/ 采取