[英]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 -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 '/^[^.]*\.[^,]*,[^,]*,[^,.]*$/{print}' file
ABCD.CP3,GHD,HDID
A.B,C,D
dbibb.yes,whoami,words
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.