2013-01-24 61 views
0

我試圖從名爲changesfile的文件正確地將參數傳遞給sed,但我一直不成功。它可能是文件修改文件的內容或使用for循環的方式。我不確定。BASH-Sed未能刪除填充元字符的屬性行

進出口使用的命令:

cat changesfile | while read i ; do sed -e "s/$i//g" "filename" ; done 
cat changesfile | while read i ; do sed -i "s/$i//g" "filename" ; done 
cat changesfile | while read i ; do sed -e '/$i/d' filename ; done 
cat changesfile | while read i ; do sed -e '/"$i"/d' filename ; done 

我需要與噸的元字符的文件匹配某些行。東西我嘗試匹配並刪除低於:

fileattribute[hostname.stile.tib.area2]=Disk /var;default_queue;area-unix 
fileattribute[hostname.stoop.trb.area]=Disk /tmp;default_queue;area-unix 

這裏有changesfile的包含通配符和轉義字符正確地傳遞信息,以sed的內容如下:

.*hostname\.stoop\.trb\.area.*Disk.*\/tmp.*area\-unix$ 
.*hostname\.stile\.tib\.area2.*Disk.*\/var.*area\-unix$ 

到目前爲止沒有任何工作。一些命令刪除了正則表達式加上其他的東西。不知道爲什麼。任何意見非常感謝。沒有人在我的工作場所有幫助。

+0

我不明白背後的邏輯。你能否請進一步解釋? (我試圖幫助) – Hitman47

+0

Stackoverflow忽略了您嘗試使用'
'和'
'進行格式化。對於代碼,用上面的文本中的空行分隔,並在每行的開頭使用4個空格。祝你好運。 – shellter

+2

'cat changesfile |同時閱讀我;做sed -ie「s/$ i // g」文件名; done'會從文件名中找到changefile中的行。 – Perleone

回答

0

請嘗試以下

#!/bin/bash 
sed -i -r -f changesfile filename 

說明

  1. -r - 使用腳本擴展正則表達式。無需轉義特殊字符。
  2. -f - 將腳本文件的內容添加到要執行的命令中。
+0

所以你說的說: fileattribute [hostname.stile.tib.area2] =磁盤的/ var; DEFAULT_QUEUE;區域UNIX fileattribute [hostname.stoop.trb.area] =磁盤/ tmp目錄; DEFAULT_QUEUE;區域UNIX into changesfile?確切的線條,這將只是從文件名中刪除它們? – user1721566

+0

將全部sed命令添加到'changesfile',每行一個。 – koola