用文件中的sed命令删除反斜杠

我有这样的文件:

'AAA' 'a\\\\b\\\\a\\' 'BBB' 'q\\l\\s\\' ... 

我想用\\来replace所有出现的\\\\

我试过这个sed命令:

 sed 's/\\//g' 

但是这将删除所有\

这是我的输出:

 'AAA' 'aba' 'BBB' 'qls' 

我想要的输出:

 'AAA' 'a\\b\\a\\' 'BBB' 'q\\l\\s\\' ... 

用2个反斜杠替换4个反斜杠序列:

 sed 's/\\\\\\\\/\\\\/g' input.txt 

或者,使用{4}来指示有多少\被匹配:

 sed 's/\\\{4\}/\\\\/g' input.txt 

input.txt中

 'AAA' 'a\\\\b\\\\a\\' 'BBB' 'q\\l\\s\\' 

产量

 'AAA' 'a\\b\\a\\' 'BBB' 'q\\l\\s\\' 

您必须使用\与另一\ 转义特殊的正​​则表达式字符\

{}也是正则表达式字符,但是类似ed的工具(ed,vim,sed,…)默认不会识别它们。 要使用大括号来指定正则表达式计数(例如, {4} ),sed要求您将其转义(例如\{4\}

所以…

  • 逃避\从字面上使用它; 不是一个正则表达式
  • escape {}将它们用作正则表达式字符而不是文字大括号

使用任何支持ERE的sed,例如GNU或AIX seds:

 $ sed -E 's/(\\){4}/\\\\/' file 'AAA' 'a\\b\\\\a\\' 'BBB' 'q\\l\\s\\' 

我想将所有'\\\\'替换为'\\'

使用以下方法:

 sed 's/\\\\\\\\/\\\\/g' file 

输出:

 'AAA' 'a\\b\\a\\' 'BBB' 'q\\l\\s\\' 

每个反斜杠\应该用…反斜线:)