2015-12-08 65 views
2

文件包含以下行的特定部分相同字符串的行:如何刪除與特定字符串的所有行,但不刪除包含在同一個文件

UserName aashii 
UserName drisha 
UserName aashii 
UserName harsha 
UserName sampada 
<Anonymous> 
UserName drisha 
UserName aashii 
</Anonymous> 

我想刪除其上的行字符串"UserName aashii"來自unix中的文件,而不刪除具有"UserName aashii"字符串的行<Anonymous>....</Anonymous>下的行。

我試過命令:

sed -i '/^ *UserName *aashii *$/d' -i $file 

但其刪除具有字符串,甚至有部分下的串線<Anonymous>.....</Anonymous>

回答

-1

隨着GNU sed的:

sed -n '/<Anonymous>/,/<\/Anonymous>/{p;b};/UserName aashii/d;p' file 

輸出:

UserName drisha 
UserName harsha 
UserName sampada 
<Anonymous> 
UserName drisha 
UserName aashii 
</Anonymous> 

-n:抑制的圖案空間自動打印

/<Anonymous>/,/<\/Anonymous>/{p;b}:在完整範圍從匹配線<Anonymous></Anonymous>打印模式空間(p),然後跳轉至腳本末尾(b)(不再處理其他命令)。

/UserName aashii/d:對於匹配的行UserName aashii刪除模式空間(d)並開始下一個循環(不進一步處理其他命令)。

p:打印模式空間

+0

sed -n'/ /,/ <\/Anonymous>/{p; b};/UserName aashii/d; p'-i文件 – aashii

+0

'sed'/ /,/ /,/ <\ /匿名/ b; /用戶名aashii/d'文件' – potong

+0

@potong:謝謝你的提示。 – Cyrus

3

你可以說所有的線:

awk '/<Anonymous>/,/<\/Anonymous>/ {print;next} !/UserName aashii/' file 

其中返回:

UserName drisha 
UserName harsha 
UserName sampada 
<Anonymous> 
UserName drisha 
UserName aashii 
</Anonymous> 

也就是說,打印如果它是range expression的一部分或不包含"UserName aashii"

+0

你的命令,工作壓力太大,但我需要編輯與輸出相同的文件。那可能嗎? – aashii

+0

當然,只要說'awk'...'file> new_file && mv new_file file'。 – fedorqui

相關問題