在文件中使用sed命令去除反斜杠

3

我有一个像这样的文件:

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

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

我尝试了这个sed命令:

sed 's/\\//g'

但这会移除所有的\

这是我的输出:

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

The output I want:

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

1
在“我想要的输出”中,BBB行与输入等效。这是期望的还是打字错误? - user2384183
3个回答

3

用两个反斜杠替换四个反斜杠的序列:

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、vim、sed 等工具默认情况下不会将它们识别为正则表达式字符。如果要使用花括号来指定正则表达式计数(例如 {4}),sed 要求您转义它们(例如 \{4\})。

因此...

  • 要在文本中使用 \ 字符,请进行转义,以便它不被视为正则表达式字符
  • 要在正则表达式中使用 {} 字符,请进行转义,以便它们被视为正则表达式字符而非文字表达式

你需要转义 { 和 } 的原因不是它们经常出现,.( 等也经常出现。原因是它们是历史上的 ERE 元字符,而不是 BRE,就像 +? 一样。如果你使用 -E 启用 ERE,则不需要转义它们。 - Ed Morton

3

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

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

1

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

使用以下方法:

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

输出结果:

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

每个反斜杠\都应该用另一个反斜杠进行转义:)

抱歉,这就是我想要的。我想将所有的'\\'替换为'\',我编辑问题时犯了错误。 - 1pa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接