我有一个问题,我有大量文件需要扫描并返回一行及其下一行,但仅当下一行以字符串开头时才需要。

String one - line one must begin with 'Bill'
String two - line two must begin with 'Jones'.

如果这两个条件匹配,则返回两行。重复整个文件。

即。原始文件:
Edith Blue
Edith Green
Edith Red
Bill Blue
Jones Red
Edith Green
Bill Green
Edith Red
Jones Green
Bill Blue

我希望它只返回:
Bill Blue
Jones Red

有任何想法吗?不知道从哪里开始,我只具有sed/awk等的基本脚本编写技能。此刻,我正在使用它来获取文件名及其下一行,但这给了我太多无用的信息与其他sed命令剥离。
grep -A 1 "^Bill" * > test.txt

我想有一种更优雅的方法来只获取我需要的线条。任何帮助将是可爱的!

最佳答案

作为初始方法的扩展,一种简单的解决方案是grep以“Bill”开头的行在之后返回,然后查找以“Jones”开头的行在之前返回...。

grep -A1 "^Bill" myfile.txt | grep "^Jones" -B1

输出:
Bill Blue
Jones Red

旁注:作为真正的测试,您的输入文件可能应该包含一些行,其中BillJones不在行的开头...
Edith Blue
Edith Jones
Edith Red
Bill Blue
Jones Red
Edith Bill
Bill Jones
Edith Red
Jones Green
Bill Blue

关于linux - 脚本-如果第二行包含字符串,则复制第二行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19453226/

10-11 14:30