2012-09-20 79 views
3

我正在使用egrep查看perforce NAS中的腳本。正則表達式只使用egrep捕獲整個單詞

我想找到我們在哪裏使用RCP & RSH ....我遇到的問題是,1)我在REGEX吸吮; 2)我正在拾取我不感興趣的垃圾。例如,如果一個文件的單詞strcpy..it在RHS上啓動,或者在RSH上啓動所有權。

顯然我對這些不感興趣,但我不想根據所有權或strcpy排除行......因爲它們可能會一起使用......並且它不是完整的列表。

這裏是我的正則表達式

'ftp|rcp|rsh' 

如何國防部這些打在FTP,但不是SFTP ...... RCP,但沒有的strcpy,RSH而不是所有權.....等等?

所以我想要匹配的東西。

ftp 
`ftp` 
/ftp/ 
"PUNCT"FTP"PUNCT" 
+1

'\ bsomethingHere \ B' – gaussblurinc

+1

或者只是'egrep的-w「FTP | rsh | rcp'' – tripleee

+0

@tripleee:你應該讓這個答案。 – knittl

回答

6

也許你需要的東西是這樣的:

\b < - 這是詞的邊界

\bpattern\b < - 這種模式只會匹配pattern,但不otherbigpatternthatyounotneed

+0

嗯......這正是我所問的......但後來我意識到可能會有不同的問題。如果rcp被稱爲/usr/bin/rcp...so也許我可以用兩邊都允許的標點符號來做到這一點嗎? – nitrobass24

+0

這有什麼不對嗎? ''[^ A-ZA-Z0-9] \ BFTP \ B [^ A-ZA-Z0-9] | [^ A-ZA-Z0-9] \ BRCP \ B [^ A-ZA-Z0-9 ] | [^ a-zA-Z0-9] \ brsh \ b [^ a-zA-Z0-9]'' – nitrobass24

+0

@ nitrobass24:'\ b'也適用於這種情況。去嘗試一下。你不需要所有那些否定字符類。 –

6

有幾個元字符:

  • \b字邊界
  • \<字開始
  • \>字結束

所以,一個可能的正則表達式是:\<(ftp|rcp|rsh)\>

+0

所以這正是我正在尋找的。我希望我早點注意到第二個答案。我已經測試過它,它可以在Linux和Solaris上運行......但在HP-UX上不起作用。你知道惠普的正則表達式有什麼不同嗎? – nitrobass24

+0

它們可能是GNU擴展。儘管我在'grep'的信息頁中找不到它。你有沒有按照[triplee](http://stackoverflow.com/users/874188/tripleee)的建議嘗試'-w'? – knittl