如何在命令提示符中提取仅由下划线连接的单词但不包含数字的字符串。(最好使用“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"
或者使用-P
PCRE 选项:
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
选项吗?考虑到您想要的输出,我建议您不要选择。