在命令行(终端)中仅显示包含单词(无数字)的字符串

在命令行(终端)中仅显示包含单词(无数字)的字符串

如何在命令提示符中提取仅由下划线连接的单词但不包含数字的字符串。(最好使用“grep -o”)

"id";"string";"string":
"11";"tomato_banana_apple";"8"
"14";"error_book_10_table_206";"1_apple_peach"

因此,我希望第二列的字符串不包含任何数字。但是,第一列和最后一列可以包含数字。

输出应为:

"11";"tomato_banana_apple";"8"

到目前为止,我已经尝试过:grep -o "[a-z]+_[a-z]+" filename.csv

答案1

根据您是否只想要匹配的字符串,您可以执行以下操作:

grep -o "\b[[:alpha:]]\+\(_[[:alpha:]]\+\)\+\b" filename.csv
tomato_banana_apple

或者

grep  "\b[[:alpha:]]\+\(_[[:alpha:]]\+\)\+\b" filename.csv
"11";"tomato_banana_apple";"8"

或者使用-PPCRE 选项:

grep -P "\b[a-z]+(?:_[a-z]+)+\b"

解释:

\b                      # word boundary
[[:alpha:]]\+           # 1 or more alpha
\(                      # star group
    _                   # 1 underscore
    [[:alpha:]]\+       # 1 or more alpha
\)\+                    # end group, may appear 1 or more times
\b                      # word boundary

答案2

基本的正则表达式,您需要\+匹配一个或多个。延长正则表达式 ( grep -E) 使用+不带反斜杠

grep '"[[:alpha:]_]\+"' filename.csv

您确定要选择此-o选项吗?考虑到您想要的输出,我建议您不要选择。

相关内容