我需要在 sed 中使用正则表达式打印包含非数字字符的所有行。输入是 csv,其中一些行包含文本和数字。我有兴趣只打印那些没有数字的。这是我尝试过的:
sed -E -n '/^\D*$/p' direcciones.csv
为什么它没有发现任何东西?
答案1
@steeldriver 已经解释了为什么你的尝试不起作用(sed
不过应该与 GNU 一起使用)。
但为什么不保持简单呢?打印仅包含非数字字符的所有行与删除所有包含数字字符的行相同:
sed '/[0-9]/d' direcciones.csv
更容易编写和阅读,不是吗?
答案2
您的 sed 实现可能不支持 PCRE 扩展\D
(即使使用-E
扩展的正则表达式开关)。您应该可以使用[^[:digit:]]
:
$ printf 'foo,bar,baz\nfoo,123,baz\n' | sed -n '/^[^[:digit:]]*$/p'
foo,bar,baz
答案3
您仅限使用sed
还是可以使用grep
?
grep -v '[0-9]' direcciones.csv