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

时间:2017-04-15 18:48:19

标签: linux sed

我有一个这样的文件:

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

我希望将所有\\\\替换为\\

我尝试了这个sed命令:

sed 's/\\//g'

但这会删除所有\

这是我的输出:

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

我想要的输出:

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

3 个答案:

答案 0 :(得分:3)

用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\}

因此...

  • 逃避\按字面意思使用它;不是正则表达式字符
  • 转义{}将它们用作正则表达式字符而非文字括号

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

  

我想替换所有&#39; \\\\&#39;到&#39; \\&#39;

使用以下方法:

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

输出:

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

每个反斜杠\都应使用...反斜杠转义:)