如何grep第n个字符串
how to grep nth string
如何使用 "grep"
shell 命令显示以特定单词开头的行中的特定单词。
例如:
我想从下面提到的行中以 searchStr
开头的行打印一个字符串 "myFTPpath/folderName/"
。
searchStr:somestring:myFTPpath/folderName/:somestring
与 awk
类似:
awk -F: '/^searchStr/{print }' 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 }' File
myFTPpath/folderName/
请记住,grep
并不是唯一可以有效进行搜索的工具。
在这种特殊情况下,行自然地分成字段,awk
可能是最好的解决方案,正如@A.M.D 的回答所暗示的那样。
然而,对于更一般的案例编辑,请记住 sed
的 -n
选项,它禁止在编辑后打印出一行:
sed -n 's/searchStr:[^:]*:\([^:]*\):.*//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
而不是可变长度的正向后视断言。
如何使用 "grep"
shell 命令显示以特定单词开头的行中的特定单词。
例如:
我想从下面提到的行中以 searchStr
开头的行打印一个字符串 "myFTPpath/folderName/"
。
searchStr:somestring:myFTPpath/folderName/:somestring
与 awk
类似:
awk -F: '/^searchStr/{print }' 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 }' File
myFTPpath/folderName/
请记住,grep
并不是唯一可以有效进行搜索的工具。
在这种特殊情况下,行自然地分成字段,awk
可能是最好的解决方案,正如@A.M.D 的回答所暗示的那样。
然而,对于更一般的案例编辑,请记住 sed
的 -n
选项,它禁止在编辑后打印出一行:
sed -n 's/searchStr:[^:]*:\([^:]*\):.*//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
而不是可变长度的正向后视断言。