如何使用"grep"
shell命令显示以特定单词开头的行中的特定单词。
例:
我想在下面提到的行中以"myFTPpath/folderName/"
开头的行打印字符串searchStr
。
searchStr:somestring:myFTPpath/folderName/:somestring
答案 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
而不是可变长度的正向后观断言。