3

我想删除所有 \ 除非它是 \n

some \'Text\'\nA new line

应该成为

some 'Text'\nA new line
4

4 回答 4

3
sed "s/\\'/'/g"

some 'Text'\nA new line
于 2013-06-12T18:58:25.493 回答
2

这可以使伎俩:

$ 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
于 2013-06-12T12:41:44.630 回答
1

记住反斜杠后面的字符,如果不是n,替换:

sed -e 's/\\\([^n]\)/\1/g'

您没有指定如何处理行尾的反斜杠。如果你也想删除它们,你必须添加

-e 's/\\$//'
于 2013-06-12T12:44:06.140 回答
1

怎么样:

echo "some \'Text\'\nA new line" | sed 's,\\[^n],,g'

perl

echo "some \'Text\'\nA new line" | perl -pe 's,\\(?!n),,g'
于 2013-06-12T12:41:54.733 回答