[英]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|44
和Robert|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.