2015-04-23 39 views
1

我有這個文件刪除「/」從文件符號殼

/sauga/pratybos/NAT.ppt 
/
/sauga/pratybos/SNMP.ppt 
/
/
/
/
/
/
/
/
/favicon.ico 
/
/
/
/
/sauga/pratybos/NAT.ppt 
/
/
/os/chap07_files/slide0018.htm 
/
/
/
/
/
/
/
/
/
/
/sauga/pratybos/NAT.ppt 
/
/
/
http://www.google.com/ 
http://www.google.com/ 
/
/
/
/

而且我想刪除/僅如果沒有文字 所以我的輸出應該是

/sauga/pratybos/NAT.ppt 
/sauga/pratybos/SNMP.ppt 
/favicon.ico 
/sauga/pratybos/NAT.ppt 
/os/chap07_files/slide0018.htm 
/sauga/pratybos/NAT.ppt 
http://www.google.com/ 
http://www.google.com/ 

我可以很容易做到這一點

awk '{gsub("/", "");print}' 1a.txt > a.txt 

但後來全部/將被刪除

是否有可能在shell中做到這一點?

+0

注意,示例文件內容有Windows風格('\ r \ N')的文件結尾。 – mklement0

回答

4

您可以使用grep -v只選擇那些不是「/」線:

grep -v '^/$' 1a.txt > a.txt 

編輯,感謝格倫·傑克曼評論!:與-x選擇該命令的
簡單變種精確匹配整條生產線像^ ...... $正則表達式:

grep -vx/1a.txt > a.txt 
+4

可以更簡單:'grep -vx /' - 「只選擇完全匹配整行的匹配項。」 –

+0

@glennjackman你應該在下面的答案中轉換grep -vx和awk示例 –

+0

@glennjackman你是對的,用'-x'選項更簡單,我用這個變體編輯答案,謝謝! –

3

您可以使用grep -v

grep -Ev '^ */ *$' file 
/sauga/pratybos/SNMP.ppt 
/favicon.ico 
/sauga/pratybos/NAT.ppt 
/os/chap07_files/slide0018.htm 
/sauga/pratybos/NAT.ppt 
http://www.google.com/ 
http://www.google.com/ 

如果沒有周圍/間隔然後使用:

grep -vx '/' file 

或者使用awk

awk '!/ *\/ *$/' file 
/sauga/pratybos/SNMP.ppt 
/favicon.ico 
/sauga/pratybos/NAT.ppt 
/os/chap07_files/slide0018.htm 
/sauga/pratybos/NAT.ppt 
+4

不需要awk的正則表達式:'awk'$ 1!=「/」'' –

+0

我用正則表達式來允許'/'前後的空格。如果情況並非如此,那麼使用最短的grep:'grep -vx'/'file' – anubhava

+0

使用awk的默認FS,需要注意周圍的空白。 –

4

這應返回所需輸出:

sed '/^\/$/d' infile > outfile 

或:

sed -i.bak '/^\/$/d' infile 

到就地編輯它同時採取備份副本。