簡體   English   中英

使用sed從文件中刪除與模式不匹配的行

[英]Removing lines from a file that don't match a pattern using sed

我想刪除沒有該表單的文件中的所有行:

something.something,東西,東西

例如,如果文件如下:

A sentence, some words  
ABCD.CP3,GHD,HDID  
Hello. How are you?  
A.B,C,D  
dbibb.yes,whoami,words  

我會留下:

ABCD.CP3,GHD,HDID  
A.B,C,D  
dbibb.yes,whoami,words

我試圖分支到sed腳本的末尾,如果我匹配我不想刪除的模式但是如果它不匹配則繼續並刪除該行:

cp $file{,.tmp}
sed "/^.+\..+,.+,.+$/b; /.+/d" "$file.tmp" > $file
rm "$file.tmp"

但這似乎沒有任何影響。

我想我可以逐行讀取文件,檢查是否匹配模式,如果有,則將其輸出到文件,但我想使用sed或類似的方法。

您可以成功使用grep

grep -E '^[^.]+\.[^,]+,[^,]+,[^,]+$' file > temp
mv temp file
grep -E '^[^.]+\.[^.]+(,[^,]+){2}$'

你可以打印出與這個something.something,something,something相匹配的線條,而不是刪除那些不滿足模式的線條。 something.something,something,something

通過sed,

$ sed -n '/^[^.]*\.[^,]*,[^,]*,[^,.]*$/p' file
ABCD.CP3,GHD,HDID  
A.B,C,D  
dbibb.yes,whoami,words

使用內聯編輯選項-i[suffix]保存所做的更改。

sed -ni.bak '/^[^.]*\.[^,]*,[^,]*,[^,.]*$/p' file

注意:如果提供了suffix-i[suffix]進行備份。

通過awk,

$ awk '/^[^.]*\.[^,]*,[^,]*,[^,.]*$/{print}' file
ABCD.CP3,GHD,HDID  
A.B,C,D  
dbibb.yes,whoami,words 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM