2013-01-21 38 views
1

我写了下面的脚本:sed的意外的字符

v="1,pop"; 
sed "$v/d" dir/file1 

它给我这个错误:

char 3: unexpected `,' 

如何解决这个问题?注意:$v的值不能被控制。

+0

你在期待“sed”命令做什么?当shell完成扩展'$ v/d'时,你有一个无效的'sed'命令。这可能是因为你想要删除符合'$ v'中的行的行,在这种情况下,第一个近似值应该使用'sed“/ $ v/d”'。如果你正在寻找包含'pop'的第一行的第一行,你必须对'$ v'中的值进行处理以生成'sed“1,/ pop/d”'。如果你想做别的事情,你需要描述你想要的东西。 –

回答

0

您正在使用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

+0

上面的引用是错误的:'sed/$ v/d file','sed'/'$ v'/ d'file'和'sed“/”$ v“/ d”file'完全一样这是因为引号中的字符都不是shell元字符,并且所有引用都会抑制元字符的解释。请注意,如果'$ v'包含(某些)元字符,则希望* it *用双引号括起来。因此,建议使用'sed'/ $ v/d“文件”。 –

0

你需要hashbang所以你的shell知道如何执行脚本。

#!/bin/sh 

你将得到......

sed: 1: "1,pop/d": expected context address

......它告诉你的命令被执行。 :)

0

在脚本中使用这种方式

V = “1,弹出”

的sed “/^$ V $/{

d

}” 目录/文件1