2013-01-21 39 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