我想删除所有 \ 符号,除非它是 \n
some \'Text\'\nA new line
应该变成:
some 'Text'\nA new line
sed "s/\\'/'/g"
some 'Text'\nA new line
$ echo "some \'Text\'\nA new line" | sed 's/\\\([^n]\)/\1/g'
some 'Text'\nA new line
也就是说,它替换了\
以及其后面没有n
的情况。\([^n]\)
捕获了\
后面的字符,以便我们可以将其打印回来。在进行替换时,我们要做的就是打印\1
,它指的是\
后面的字符。
为了避免出现太多斜杠,也可以写成:
$ echo "some \'Text\'\nA new line" | sed 's:\\\([^n]\):\1:g'
some 'Text'\nA new line
如果反斜杠后面的字符不是n
,请记住该字符并替换:
sed -e 's/\\\([^n]\)/\1/g'
您没有说明如何处理行末的反斜杠。如果您也想将它们删除,您需要添加
-e 's/\\$//'
echo "some \'Text\'\nA new line" | sed 's,\\[^n],,g'
echo "some \'Text\'\nA new line" | perl -pe 's,\\(?!n),,g'