2012-06-19 103 views
0

我想搜索到目錄中的所有文件,像@「LBL_18989」 @「LBL_15459」字符串結尾由.M,@「LBL_14359」 ......Linux命令行的正則表達式

我的命令是:

find . type f -name \*.m | grep '@"LBL_[[0-9]"]+' 

,但它不工作:(

+1

@ F.J。 - 編輯帖子以糾正與他的代碼錯誤導致混亂。 – jordanm

+0

最初的find命令是:'find。鍵入f -name * .m | grep'@「LBL _ [[0-9]」] +''。它不會允許我更改帖子,因爲刪除「\」不是6個字符的更改。 – jordanm

+1

您是否試圖使用該字符串模式或包含帶該模式的文本數據的文件來grep文件名? – jdi

回答

3

你應該總是給你的論點。您的發現-name模式包含「*」,這意味着shell將努力擴大它作爲一個水珠它傳遞給前find。你也可以使用-regex來替代find到grep的輸出。

find . -type f -regex '@"LBL_[[:digit:]"]+' 

基於jdi的評論,您可能會希望搜索給定正則表達式的這些文件的內容。如果是這樣,您可以使用以下內容:

find . type f -name '*.m' -exec grep -E '@"LBL_[[:digit:]"]+' /dev/null {} + 
+0

我實際上只是將自己的編輯作爲答案輸入。你也可以這樣寫:'-exec grep -H -E'@「LBL _ [[:digit:]」] +'{} \;' – jdi

+0

@jdi - 是的,這是我通常使用的方式, -H'不是POSIX,問題是標記爲OSX。 – jordanm

+0

我現在在OSX框中。無論 – jdi

0

您的代碼爲我運行。但是,您在問題中陳述的正則表達式將與您的示例列表中的文件名相比更多。如果你正在查看你的文件名是否需要名稱驗證,這可能是一個問題,因爲有些驗證不應該。您的正則表達式模式

grep的 '@ 「LBL _ [[0-9]」] +'

也匹配的文件名,如

  1. @ 「LBL_」
  2. @ 「LBL_2」
  3. @ 「LBL_3」 3"
  4. @ 「LBL_」 4

如果列表確實是representat香港專業教育學院我就改用

grep的「@‘LBL _ [0-9] +’」

和引號字符移動到加後,在模式的結尾。 你可以使用grep,也許這就是你的用例,但是如果你使用egrep或grep和-E開關,你可以使用[[:digit:]]類。 POSIX.2使用破折號字符在括號表達式中的範圍上皺眉。從POSIX規範:「範圍非常依賴於排序,而便攜式程序應該避免依賴它們。」