加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – grep A:匹配后打印所有内容

发布时间:2020-12-15 19:25:36 所属栏目:安全 来源:网络整理
导读:参见英文答案 How to get the part of file after the line that matches grep expression ? (first match)1 嗨,我有一个包含URL列表的文件,如下所示: 文件1: http://www.google.comhttp://www.bing.comhttp://www.yahoo.comhttp://www.baidu.comhttp://
参见英文答案 > How to get the part of file after the line that matches grep expression ? (first match)1
嗨,我有一个包含URL列表的文件,如下所示:

文件1:

http://www.google.com
http://www.bing.com
http://www.yahoo.com
http://www.baidu.com
http://www.yandex.com
....

我想得到以下所有记录:http://www.yahoo.com,结果如下:

文件2:

http://www.baidu.com
http://www.yandex.com
....

我知道我可以使用grep找到yahoo.com所在的行号

$grep -n 'http://www.yahoo.com' file1
3 http://www.yahoo.com

但是我不知道如何在第3行之后获取该文件。另外,我知道grep中有一个标志-A打印匹配后的行。但是,您需要在匹配后指定所需的行数。我想知道有没有办法解决这个问题。喜欢:

PSEUDO CODE:
$ grep -n 'http://www.yahoo.com' -A all file1 > file2

我知道我可以使用我得到的行号和wc -l来获取yahoo.com之后的行数,但是感觉很跛脚。

期待一个方便和方便的解决方案。
感觉自由批评我一开始就使问题复杂化,awk和sed命令也受到欢迎!

AWK

如果你不介意使用awk:

awk '/yahoo/{y=1;next}y' data.txt

这个脚本有两个部分:

/yahoo/ { y = 1; next }
y

第一部分指出,如果我们遇到一条与yahoo的行,我们设置变量y = 1,然后跳过该行(下一个命令将跳转到下一行,从而跳过当前行的任何进一步的处理)。没有下一个命令,将打印yahoo行。

第二部分是:

y != 0 { print }

这意味着,对于每一行,如果变量y不为零,我们打印该行。在awk中,如果引用变量,则该变量将被创建,并且取决于上下文,为零或空字符串。在遇到yahoo之前,变量y为0,因此脚本不会打印任何内容。遇到雅虎后,y为1,所以每一行都会打印出来。

桑达

或者,使用sed,以下将删除一切,直到并包括与yahoo的行:

sed '1,/yahoo/d' data.txt

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读