Linux正则表达式 - 在行的开头使用OR运算符

时间:2014-01-24 14:36:40

标签: regex linux shell

我有一个csv文件,我需要将第一列拉出来。我想采用标题(由字母组成)和仅由数字组成的数据。

示例输入:

"HEADER1","HEADER2"
"1234567","TEXT"
"3456789","TEXT2"

由于两者都封装在双引号内,我的输出应为:

"HEADER"
"1234567"
"3456789"

我目前正在使用以下正则表达式,它只给我数据而不是标题。我认为中间的'OR'运算符将包含任何文本以及用双引号封装的数字。知道为什么这不给我标题吗?

grep -o "^\"[0-9]\+\"\|^\"[A-Z]\+\"\"" test.csv > test2.csv

干杯

3 个答案:

答案 0 :(得分:2)

问题在于您已关闭"[A-Z]\+"两次的报价:

grep -o "^\"[0-9]\+\"\|^\"[A-Z]\+\"\"" test.csv > test2.csv
                                   ^^

删除它,一切都很好。为了便于理解,请使用单引号:

grep -o '^"[0-9]\+"\|^"[A-Z]\+"' test.csv > test2.csv

答案 1 :(得分:1)

你的正则表达式包含太多 \“。 使用:

grep -o "^\"[0-9]\+\"\|^\"[A-Z]\+\"" test.csv > test2.csv

答案 2 :(得分:0)

您可以使用awk:

awk -F, '$1 ~ /"[0-9]+|[a-zA-Z]+"/ {print $1}' file