2013-10-08 78 views
0

我看了其他sed頁面,我找不到一個在正則表達式搜索部分使用-i的變量。我正試圖在文件myresolv.conf中截取一條要求的行並獲取其行號。 5人在我的課都困:( 任何幫助是真棒在sed -i(正則表達式?)bash中使用變量

line=$(grep -n "$3" ./myresolv.conf | cut -d: -f1) 

sed -i "$line" ./myresolv.conf 
+0

當你說'切出線條'時,你的意思是'刪除線條'嗎? – jkshah

+0

可能的重複[從文件中刪除特定的行而不使用sed或awk](http://stackoverflow.com/questions/19128876/remove-a-specific-line-from-a-file-without-using-sed -or-awk) – tripleee

+0

我想使用sed dude –

回答

1

看來你想從文件中刪除特定的行。你希望在你的line變量中得到一個單一的行號(但要小心 - 如果你有多條匹配的行,你將得到一個數字列表,這將導致你的過程的其餘部分爆炸)。您遇到的問題是您正在輸入的命令sed只是行號 - 您沒有指定sed用於處理該行號的任何內容。所以,也許你想這樣的:

sed -i "${line}d" file.txt 

如果我誤解了你的問題,而你不想刪除該線,但只是打印出來,然後更換dp ...

+0

我想刪除行,但這不是爲我工作,我得到sed:-e表達式#1,字符2:未知的命令:' ' –

+0

也許你的'行'變量包含的東西不是一個數字,然後...?或者你有'sed'的版本,需要'-i'的參數,比如'sed -i bak「3d」file.txt' ... – twalberg

1

我想,你的意思是remove line當你說cut out line

嘗試使用grep-v的選擇。我相信你不需要sed這裏。

grep -v "$3" ./myresolv.conf 

或者,如果你想刪除文件本身

排隊
sed -i.bak "/$3/d" ./myresolv.conf 

這是很好的使用-i.bak overwirting更改之前創建備份文件。

+0

最後有人回答真的有用。謝謝@jkshah –