我想删除所有\,除非它是\ n
some \'Text\'\nA new line
应该成为
some 'Text'\nA new line
答案 0 :(得分:3)
sed "s/\\'/'/g"
some 'Text'\nA new line
答案 1 :(得分:2)
这可以解决问题:
$ 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
答案 2 :(得分:1)
怎么样:
echo "some \'Text\'\nA new line" | sed 's,\\[^n],,g'
使用perl
echo "some \'Text\'\nA new line" | perl -pe 's,\\(?!n),,g'
答案 3 :(得分:1)
如果字符不是n
,请记住反斜杠后面的字符,替换:
sed -e 's/\\\([^n]\)/\1/g'
您没有指定如何处理行末尾的反斜杠。如果你想删除它们,你必须添加
-e 's/\\$//'