2014-01-24 22 views
0

我有一個csv文件,我需要將第一列從中拉出來。我想把標題(由字母組成)和僅由數字組成的數據。Linux正則表達式 - 在行首使用OR運算符

樣品輸入:

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

由於兩個被封裝在雙引號中我的輸出應該是:

"HEADER" 
"1234567" 
"3456789" 

我目前使用下面的正則表達式,這是唯一給我的數據,而不是標題。我認爲中間的'OR'運算符將包含任何文本以及用雙引號封裝的數字。任何想法,爲什麼這不是給我我的頭?

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

乾杯

+1

您是否嘗試過'grep -o「^ \」[0-9A-Z] \ + \「」test.csv'? – leu

+0

Thanks @leu - so simple! – Zfunk

+1

@leu,'[0- 9] \ + \ | [A-Z] \ +'和'[0-9A-Z] \ +'。 – Shahbaz

回答

2

的問題是,你已經關閉您的報價"[A-Z]\+"兩次:

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

刪除,一切都很好。爲了便於理解,使用單引號:

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

正則表達式有什麼問題嗎?我會很高興對downvote的評論,所以我也可以學習。 – Shahbaz

1

你的正則表達式包含了太多\」末 用途:

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

您可以使用AWK:

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

謝謝,有用的知道! – Zfunk