2015-04-06 96 views
0

如何使用"grep" shell命令從以特定單詞開始的行顯示特定單詞。如何grep第n個字符串

例如: 我想從searchStr開始的行打印一個字符串"myFTPpath/folderName/"在下面提到的行。

searchStr:somestring:myFTPpath/folderName/:somestring 
+0

爲了更準確使用: 'awk的-F: '/ ^字符串searchstr:/ {打印$ 3}' File' 這將防止字符串searchstr和searchStr2之間的混淆 – webDev 2015-04-07 10:47:21

回答

4

像這樣的東西與awk

awk -F: '/^searchStr/{print $3}' File 

從開始searchStr的所有行,打印3rd場(場分隔符設置爲:

樣品:

AMD$ cat File 
someStr:somestring:myFTPpath/folderName/:somestring 
someStr:somestring:myFTPpath/folderName/:somestring 
searchStr:somestring:myFTPpath/folderName/:somestring 
someStr:somestring:myFTPpath/folderName/:somestring 
AMD$ awk -F: '/^searchStr/{print $3}' File 
myFTPpath/folderName/ 
+1

@webDev:或者,如果你想使用一個變量: 'N = 3; awk -v col = $ n -F:'/^searchStr/{print $ col}'文件' – Cyrus 2015-04-06 09:34:43

1

請記住,grep不是唯一可以有效執行搜索的工具。

在這種特殊情況下,行自然分爲字段,awk可能是最好的解決方案,正如@ A.M.D的回答所暗示的。

對於更一般的情況下修改,然而,請記住sed-n選項,這抑制打印出編輯後的行:

sed -n 's/searchStr:[^:]*:\([^:]*\):.*/\1/p' input-file 

-n抑制線的自動打印,和後/p標誌明確地打印出其中替換的行。

這種匹配模式很煩瑣 - 在這種情況下使用awk - 但不要忘記sed -n

0

您可以使用grep本身獲得所需的輸出,但您需要啓用-P-o參數。

$ echo 'searchStr:somestring:myFTPpath/folderName/:somestring' | grep -oP '^searchStr:[^:]*:\K[^:]*' 
myFTPpath/folderName/ 

\K丟棄存在旁\K其由在其通過圖案匹配,則最終僅留下字符打印先前匹配的字符。這裏我們使用了\K而不是一個可變長度的正向lookbehind斷言。