除了换行符外,删除所有反斜杠

3

我想删除所有 \ 符号,除非它是 \n

some \'Text\'\nA new line

应该变成:

some 'Text'\nA new line

你能不能只删除所有内容并在行末添加一个换行符呢?这样可能更容易些。 - 0xCAFEBABE
4个回答

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

some 'Text'\nA new line

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

1
我们已经同步了,@Jaypal :) - fedorqui
如果反斜杠后面不是n,则会删除反斜杠后面的字符。与我的示例相关的是,“Text”周围的撇号丢失了。 - tmanthey
已解决,@tmanthey,现在我捕获了该字符并将其打印回来。 - fedorqui

1

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

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

您没有说明如何处理行末的反斜杠。如果您也想将它们删除,您需要添加

-e 's/\\$//'

1
怎么样:
echo "some \'Text\'\nA new line" | sed 's,\\[^n],,g'

使用Perl。
echo "some \'Text\'\nA new line" | perl -pe 's,\\(?!n),,g'

你的sed命令中缺少括号: sed 's,\\\([^n]\),\1,g'。这与这个(已接受答案)相同。 - captcha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接