簡體   English   中英

使用sed刪除具有特定正則表達式的文件中的所有行

[英]Delete all lines in file with specific regex using sed

我們要刪除所有與以下“正則表達式輸入”匹配的行,並將它們放在一個新文件中:

Hi|thisisatest|11

我們有什么:

check='([^[:space:]]+)|([^[:space:]]+)|([^[:space:]]+)'
sed '/$check/d' test.txt > test_new.txt

它目前無效。

編輯:

我們得到以下test.txt:

Jack|Miles|44
Carl|13
Robert|Whittaker|87
John|2
Frank|65

我們要刪除Jack|Miles|44Robert|Whittaker|87 ,它們匹配正則表達式(如果正則表達式是正確的)。

正確的BRE正則表達式是:

check='[^[:space:]]*|[^[:space:]]*|[^[:space:]]*'

然后用它作為:

sed "/$check/d" file
Carl|13
John|2
Frank|65

順便說一句awk可以更好地處理它而不使用正則表達式。 只需使用| 作為分隔符並刪除所有沒有2個字段的行:

awk -F '|' 'NF==2' file

Carl|13
John|2
Frank|65

使用awk時更簡單,只是這樣做,

awk -F'|' 'NF<=2' file
Carl|13
John|2
Frank|65

要使用更新修改同一文件,請執行以下操作:

awk -F'|' 'NF<=2' file > tmp && mv tmp file

使用GNU sed:

sed -r '/\S+\|\S+\|\S+/d' file 

也是一個grep

grep -P '^\w+\|\d+$' file >tmp

從文件中選擇“正確”條目,例如word|digits

要么

grep -P '^[^|]+\|[^|]+$' file >tmp

並將tmp重命名為file

暫無
暫無

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

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