我们要删除与以下"正则表达式输入相匹配的所有行"并将它们放在一个新文件中:
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
(如果正则表达式正确)。
答案 0 :(得分:2)
正确的BRE正则表达式是:
check='[^[:space:]]*|[^[:space:]]*|[^[:space:]]*'
然后将其用作:
sed "/$check/d" file
Carl|13
John|2
Frank|65
btw awk
可以在不使用正则表达式的情况下更好地处理它。只需使用|
作为分隔符,并删除所有没有2个字段的行:
awk -F '|' 'NF==2' file
Carl|13
John|2
Frank|65
答案 1 :(得分:2)
使用awk
时更简单,只需要做,
awk -F'|' 'NF<=2' file
Carl|13
John|2
Frank|65
要使用更新修改同一文件,只需执行,
awk -F'|' 'NF<=2' file > tmp && mv tmp file
答案 2 :(得分:1)
使用GNU sed:
sed -r '/\S+\|\S+\|\S+/d' file
答案 3 :(得分:0)
还是grep
:
grep -P '^\w+\|\d+$' file >tmp
从文件中选择“正确的”条目,例如word|digits
或
grep -P '^[^|]+\|[^|]+$' file >tmp
并将tmp
重命名为file