从文本文件中删除反斜杠


10

我有

输入:

 NISHA =\455  

输出:

 NISHA = 455

我想\从输出中删除。我试图使用命令,sed "s/[\]//g" P但是它不起作用,并且它会标记错误:

character found after backslash is not meaningful

3
您似乎具有非POSIX实现sed(或者可能是从非POSIX shell运行该命令?)。sed不过,您不需要的tr就足够了:tr -d '\\' < P
斯特凡Chazelas

Answers:


20

如示例结果所示,您可以将反斜杠替换为空格:

sed 's/\\/ /g'

或者您可以按照代码中的显示将其删除:

sed 's/\\//g'

特殊字符

转义反斜杠可能会出现问题,以取消其特殊含义。反斜杠是一个特殊字符,用于在外壳程序和正则表达式中转义。

您首先在外壳程序中处理您在外壳程序的命令行或脚本中键入的命令,该程序解释字符的特殊含义及其转义。然后将结果传递到要执行的命令(如sed),该命令将对字符进行自己的解释。在构造命令时,思维过程是相反的方式:首先为正则表达式添加转义,然后为shell添加转义。

  1. 在一个正则表达式(输入类似命令sedgrep等等)反斜线可以通过这样的反斜线转义:\\也可以使用集表达式[\]喜欢你用来因为反斜线失去了它的特殊含义。

  2. 在shell中(如bash),您可以通过反斜杠转义反斜杠。所以不要\\\。用双引号引起来的字符串"会使反斜杠的行为更加复杂<1>,但是双反斜杠仍会产生一个单反斜杠。将字符串括在单引号之间'可以使每个字符按字面意义处理(除外)'

如果要使用双引号,则可以使用以下选项之一:
sed "s/\\\\//g"- 在shell中转义为\by \,然后\再次在正则表达式中转义所有内容。实际上,在这种情况下,双引号不是必需的,因为每个特殊字符都可以正确转义。
sed "s/[\\]//g"-在外壳中使用反斜杠转义\,在正则表达式中使用set [ ]
sed "s/[\]//g"-是的,您的示例应在符合POSIX的环境中工作!在双引号之间\表示自身,除非在双引号的上下文中在特殊字符之前:$`"\或换行符。在您的情况下,无论是外壳还是外壳sed都不遵循POSIX标准。

使用单引号,您还可以按原样使用字符串,也可以使用较短的方式:
sed 's/[\]//g'
sed 's/\\//g'


6

您必须转义反斜杠。尝试这个:

sed 's/\\//g'

3

如果您不希望使用sed解决方案,请尝试使用以下命令:

$ echo "NISHA =\455"| awk -F'\' '{print $1 $2}'
$ echo "NISHA =\455"| tr '\\' ' '
$ echo "NISHA =\455"| tr -d '\\'
$ echo "NISHA =\455"| cut -c 1-7,9-11


1
sed 's/\\//'

像处理大多数特殊字符一样,将a \放在前面\


您已g出于未知原因省略了该标志。这会更改命令的行为,但是在问题中未要求进行此更改。否则,与以前的答复相比,您的答复不会带来任何新变化。
pabouk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.