我写了下面的脚本:sed的意外的字符
v="1,pop";
sed "$v/d" dir/file1
它给我这个错误:
char 3: unexpected `,'
如何解决这个问题?注意:$v
的值不能被控制。
我写了下面的脚本:sed的意外的字符
v="1,pop";
sed "$v/d" dir/file1
它给我这个错误:
char 3: unexpected `,'
如何解决这个问题?注意:$v
的值不能被控制。
您正在使用sed
错误的方式。
$ v="1,pop";
$ cat file
1,pop
Suku
JohnGeorge
stackoverflow
serverfault
$ sed '/'$v'/d' file
Suku
JohnGeorge
stackoverflow
serverfault
$ sed "/"$v"/d" file
Suku
JohnGeorge
stackoverflow
serverfault
如果你想替换里面sed
一个bash变量,需要用引号包围它像我上面显示。此外,如果您想要修改文件,则需要使用sed
和-i
。
上面的引用是错误的:'sed/$ v/d file','sed'/'$ v'/ d'file'和'sed“/”$ v“/ d”file'完全一样这是因为引号中的字符都不是shell元字符,并且所有引用都会抑制元字符的解释。请注意,如果'$ v'包含(某些)元字符,则希望* it *用双引号括起来。因此,建议使用'sed'/ $ v/d“文件”。 –
你需要hashbang所以你的shell知道如何执行脚本。
#!/bin/sh
你将得到......
sed: 1: "1,pop/d": expected context address
......它告诉你的命令被执行。 :)
在脚本中使用这种方式
V = “1,弹出”
的sed “/^$ V $/{
d
}” 目录/文件1
你在期待“sed”命令做什么?当shell完成扩展'$ v/d'时,你有一个无效的'sed'命令。这可能是因为你想要删除符合'$ v'中的行的行,在这种情况下,第一个近似值应该使用'sed“/ $ v/d”'。如果你正在寻找包含'pop'的第一行的第一行,你必须对'$ v'中的值进行处理以生成'sed“1,/ pop/d”'。如果你想做别的事情,你需要描述你想要的东西。 –