linux - 如何使用 grep、sed 和 awk 打印找到的模式后的下一个单词?

标签 linux bash awk sed grep

例如,
假设我有 logfile.txt 其中包含
“这是一个示例文本文件”

我的模式是“sample” 如何在我的 logfile.txt 中获得 sample 旁边的单词。

最佳答案

这是使用 awk 执行此操作的一种方法:

$ awk '{for(i=1;i<=NF;i++)if($i=="sample")print $(i+1)}' file
text

解释:
$ awk '{
    for(i=1;i<=NF;i++)        # process every word
        if($i=="sample")      # if word is sample
            print $(i+1)      # print the next
}' file

和 sed:
$ sed -n 's/.* sample \([^ ]*\).*/\1/p' file
text

IE。之后 sample下一个空格分隔的字符串

和 grep 使用 PCRE 和正面看后面:
$ grep -oP '(?<=sample )[^ ]*' file
text

见前面的解释。

关于linux - 如何使用 grep、sed 和 awk 打印找到的模式后的下一个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48606867/

相关文章:

c - 有没有一些带有C API的库可以画图?

c - 跟踪文件访问

arrays - 为什么 bash 数组的一部分作为命令执行?

Linux shell 脚本 - 简单的 awk 脚本问题

regex - 如何 grep 一个特定的模式

linux - 过滤列 Linux

linux - 我应该使用 netcat 在端口 25 上查看电子邮件吗?

linux - 如何在多台Linux机器上同时触发某个shell脚本?

bash - 如果存在或不存在任何 ".sql ",如何编写 bash 脚本来扫描我的 ubuntu 服务器?

bash - 如何在 Vi 编辑器中删除 CRLF