我有一个像这样的文件:

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

我想用\\\\替换所有出现的\\

我尝试了这个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\})

所以...
  • 转义\可以直接使用它;不作为正则表达式字符
  • 转义{}以将它们用作正则表达式字符,而不是文字括号
  • 10-07 16:26
    查看更多