我有一個包含這些行的文件:如何獲得egrep的匹配^爲每一行(因爲它應該是)
SOME COMMAND 34 XXXXX ;
; a comment which may contain a :
sometext001 : X00 : 1 ;
: X01 : 1 ;
: X11 : 1 ;
而且要檢索sometext001
使用grep/egrep的。
使用正則表達式^\s*[^:\s;]+\s*:
(在詞:起始於與一些或沒有空白的行的開頭,接着在至少一個字符不是空格,結腸癌或分號再次其次是一些或沒有空格,隨後冒號)
如果啓用多線支持,我可以使用在線正則表達式測試儀http://regexr.com?35eam來匹配文本(包括以下內容:)。
我的印象是,grep/egrep無論如何都是一行一行地工作,那麼爲什麼在包含這個例子的文件中使用egrep時,正則表達式不起作用?
是否有另一種方法來實現egrep所需的結果,或者,如果這不可能,還有另一個可從shell腳本調用的單線程?
更新:雖然指定了線的正則表達式來^[[:space:]]*[^[:space:];]+[[:space:]]*:
所提出的變化相匹配,則它仍然使用-o選項egrep命令時,該行相匹配兩次,一次爲sometext001 :
和一次X00 :
爲明顯。 如何解決這個問題?
更新:測試文件完全包含上面給出的文本。命令行是egrep -o '^([[:space:]]*[^:[:space:];]+[[:space:]]*:)' test.txt
(也嘗試沒有()對)。輸出是
sometext001 :
X00 :
你是對的,grep works li一行一行。你不能在多行上使用grep(正如你在這裏試圖做的那樣) – KingJohnno
@KingJohnno你能解釋一下我的正則表達式中的多行嗎?我只是想匹配一行文本中的字符。沒有花哨的先行或後視,沒有明確的換行符等。 –
我想知道你的代碼,你張貼 - 我相信':'表示新行。對不起,有任何困惑。 – KingJohnno