This question already has answers here:
How to get the part of a file after the first line that matches a regular expression?
(12个答案)
4年前关闭。
嗨,我有一个包含URL列表的文件,如下所示:
文件1:
我想获取所有记录:http://www.yahoo.com,结果如下所示:
文件2:
我知道我可以使用grep查找使用yahoo.com所在的行号
但是我不知道如何在第3行之后获取文件。此外,我知道grep中有一个标志-A在您的匹配项后打印行。但是,您需要指定匹配后要多少行。我想知道该问题是否可以解决。喜欢:
我知道我们可以使用获得的行号和wc -l来获取yahoo.com之后的行数,但是..感觉很la脚。
期待方便和简单的解决方案。
随意批评我从一开始就使问题复杂化,也欢迎awk和sed命令!
该脚本包括两个部分:
第一部分指出,如果遇到带有yahoo的行,则设置变量y = 1,然后跳过该行(
第二部分是以下方面的简写:
这意味着,对于每一行,如果变量y不为零,我们将打印该行。在awk中,如果您引用一个变量,则将根据上下文创建该变量,该变量可以为零或为空字符串。在遇到yahoo之前,变量y为0,因此脚本不会打印任何内容。遇到yahoo之后,y为1,因此此后的每一行都会被打印。
塞德
或者,使用sed,以下内容将删除所有内容,包括yahoo行以下的内容:
(12个答案)
4年前关闭。
嗨,我有一个包含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之后的行数,但是..感觉很la脚。
期待方便和简单的解决方案。
随意批评我从一开始就使问题复杂化,也欢迎awk和sed命令!
最佳答案
Awk
如果您不介意使用awk:
awk '/yahoo/{y=1;next}y' data.txt
该脚本包括两个部分:
/yahoo/ { y = 1; next }
y
第一部分指出,如果遇到带有yahoo的行,则设置变量y = 1,然后跳过该行(
next
命令将跳至下一行,因此跳过当前行的任何进一步处理)。如果没有next
命令,将打印yahoo行。第二部分是以下方面的简写:
y != 0 { print }
这意味着,对于每一行,如果变量y不为零,我们将打印该行。在awk中,如果您引用一个变量,则将根据上下文创建该变量,该变量可以为零或为空字符串。在遇到yahoo之前,变量y为0,因此脚本不会打印任何内容。遇到yahoo之后,y为1,因此此后的每一行都会被打印。
塞德
或者,使用sed,以下内容将删除所有内容,包括yahoo行以下的内容:
sed '1,/yahoo/d' data.txt
关于bash - grep + A:匹配后打印所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18166552/
10-15 12:19