如何使用"grep"
shell命令從以特定單詞開始的行顯示特定單詞。如何grep第n個字符串
例如: 我想從searchStr
開始的行打印一個字符串"myFTPpath/folderName/"
在下面提到的行。
searchStr:somestring:myFTPpath/folderName/:somestring
如何使用"grep"
shell命令從以特定單詞開始的行顯示特定單詞。如何grep第n個字符串
例如: 我想從searchStr
開始的行打印一個字符串"myFTPpath/folderName/"
在下面提到的行。
searchStr:somestring:myFTPpath/folderName/:somestring
像這樣的東西與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/
@webDev:或者,如果你想使用一個變量: 'N = 3; awk -v col = $ n -F:'/^searchStr/{print $ col}'文件' – Cyrus 2015-04-06 09:34:43
請記住,grep
不是唯一可以有效執行搜索的工具。
在這種特殊情況下,行自然分爲字段,awk
可能是最好的解決方案,正如@ A.M.D的回答所暗示的。
對於更一般的情況下修改,然而,請記住sed
的-n
選項,這抑制打印出編輯後的行:
sed -n 's/searchStr:[^:]*:\([^:]*\):.*/\1/p' input-file
的-n
抑制線的自動打印,和後/p
標誌明確地打印出其中是替換的行。
這種匹配模式很煩瑣 - 在這種情況下使用awk
- 但不要忘記sed -n
。
您可以使用grep
本身獲得所需的輸出,但您需要啓用-P
和-o
參數。
$ echo 'searchStr:somestring:myFTPpath/folderName/:somestring' | grep -oP '^searchStr:[^:]*:\K[^:]*'
myFTPpath/folderName/
\K
丟棄存在旁\K
其由在其通過圖案匹配,則最終僅留下字符打印先前匹配的字符。這裏我們使用了\K
而不是一個可變長度的正向lookbehind斷言。
爲了更準確使用: 'awk的-F: '/ ^字符串searchstr:/ {打印$ 3}' File' 這將防止字符串searchstr和searchStr2之間的混淆 – webDev 2015-04-07 10:47:21