如何grep第n个字符串

时间:2015-04-06 08:42:15

标签: unix awk grep

如何使用"grep" shell命令显示以特定单词开头的行中的特定单词。

例: 我想在下面提到的行中以"myFTPpath/folderName/"开头的行打印字符串searchStr

searchStr:somestring:myFTPpath/folderName/:somestring

3 个答案:

答案 0 :(得分: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 :(得分:1)

请记住,grep并非唯一可以有效进行搜索的工具。

在这种特殊情况下,线条自然地分为字段,awk可能是最好的解决方案,正如@ A.M.D的答案所示。

但是,对于更一般的案例编辑,请记住sed的{​​{1}}选项,该选项会在编辑后禁止打印出一行:

-n

sed -n 's/searchStr:[^:]*:\([^:]*\):.*/\1/p' input-file 禁止自动打印该行,并且尾随-n标志明确打印出 替换的行。

这种匹配模式很繁琐 - 在这个案例中使用/p - 但不要忘记awk

答案 2 :(得分:0)

您可以使用grep本身获得所需的输出,但您需要启用-P-o参数。

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

\K会丢弃之前在最后打印时匹配的字符,只留下\K旁边存在与该模式匹配的字符。在这里,我们使用\K而不是可变长度的正向后观断言。