我有一个像这样的文件:
'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\\'
...
用两个反斜杠替换四个反斜杠的序列:
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对于任何支持ERE的sed,例如GNU或AIX sed:
$ 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\\'
\
都应该用另一个反斜杠进行转义:)