我想删除所有 \ 除非它是 \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'