我有一个这样的文件:
'AAA' 'a\\\\b\\\\a\\'
'BBB' 'q\\l\\s\\'
...
我希望将所有\\\\
替换为\\
。
我尝试了这个sed命令:
sed 's/\\//g'
但这会删除所有\
。
这是我的输出:
'AAA' 'aba'
'BBB' 'qls'
我想要的输出:
'AAA' 'a\\b\\a\\'
'BBB' 'q\\l\\s\\'
...
答案 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\\'
每个反斜杠\
都应使用...反斜杠转义:)