我想从文件中删除字符“[”。我试过
sed -i 's/[//g' 'filename'
但是我收到以下错误
sed:-e表达式#1,字符6:未终止的“s”命令
答案1
是的,该[
字符很特殊,因为它开始一个[...]
组(括号内的表达式)。
在sed
OpenBSD 上,您的命令会给出更有用的错误消息:
$ sed 's/[//g'
sed: 1: "s/[//g": unbalanced brackets ([])
要使用 删除所有[
字符sed
,请将其转义:
sed -i 's/\[//g' file
或者将其放在括号表达式内:
sed -i 's/[[]//g' file
或者,使用tr
,
tr -d '[' <file >file.new
另外,在您知道您正在尝试的表达式实际上有效之前,请勿使用就地编辑sed
,否则您可能必须从备份中恢复数据。
答案2
由于该问题最初被标记为awk
且 没有真正充分的理由:
awk '{gsub(/\[/, "")}1' file >newfile
这将打印所有删除的文件[
并将其保存到newfile
.
使用gawk
您可以就地进行编辑:
gawk -i inplace '{gsub(/\[/, "")}1' file
awk
不过,除非您还用于对文件执行其他操作,否则我不会使用其中任何一个。