我有
输入:
NISHA =\455
输出:
NISHA = 455
我想\
从输出中删除。我尝试使用命令sed "s/[\]//g" P
,但它不起作用,并且标记了一个错误:
character found after backslash is not meaningful
答案1
您可以将反斜杠替换为空格,如示例结果中所示:
sed 's/\\/ /g'
或者您可以按照代码所示将其删除:
sed 's/\\//g'
特殊字符
转义反斜杠以取消其特殊含义可能会出现问题。反斜杠是一种特殊字符,用于在 shell 和正则表达式中进行转义。
您在 shell 命令行或脚本中键入的命令首先由 shell 处理,shell 解释字符的特殊含义及其转义。然后将结果传递给要执行的命令(例如sed
),该命令执行自己对字符的解释。当您构建命令时,心理过程是相反的:首先为正则表达式添加转义,然后为 shell 添加转义。
在正则表达式中(输入诸如 等命令
sed
)grep
反斜杠可以通过反斜杠转义,如下所示:\\
并且您也可以像您使用的那样使用集合表达式,[\]
因为反斜杠失去了其特殊含义。在一个壳里(比如
bash
)你可以通过反斜杠转义反斜杠。所以不要\
写\\
.将字符串括在双引号之间"
会使反斜杠行为更加复杂<1>但双反斜杠仍会产生单反斜杠。将字符串括在单引号之间'
可以按字面意思处理除 之外的每个字符'
。
如果你想使用双引号,您可以使用以下其中一项:
sed "s/\\\\//g"
-在 shell 中转义\
by ,并再次转义正则表达式中的 every。事实上,在这种情况下双引号不是必需的,因为每个特殊字符都已正确转义。- 在 shell 中通过反斜杠转义,并在正则表达式中使用 set 。- 是的,您的示例应该在符合 POSIX 的环境中运行!双引号之间代表其自身,除非它位于双引号上下文中的特殊字符之前:或换行符。在您的情况下,看起来 shell 或不遵循 POSIX 标准。\
\
sed "s/[\\]//g"
\
[
]
sed "s/[\]//g"
\
$`"\
sed
和单引号您还可以使用您所使用的字符串或更短的方式:
sed 's/[\]//g'
sed 's/\\//g'
答案2
你必须转义反斜杠。尝试这个:
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
答案4
sed 's/\\//'
像处理大多数特殊字符一样在\
前面放置一个。\