我想删除所有 \ 除非它是 \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]\)
之后捕获字符,\
以便我们可以将其打印回来。这就是我们在进行替换时所做的: print \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'
和perl
echo "some \'Text\'\nA new line" | perl -pe 's,\\(?!n),,g'