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