我寫了下面的腳本: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」'。如果你想做別的事情,你需要描述你想要的東西。 –