【发布时间】:2015-02-16 13:30:54
【问题描述】:
请帮助 - 我对我的 sed/awk/grep 非常生疏,我正在尝试处理一个文件(导出的 PDF 大约 4700 页长)。
这是我正在尝试做的:搜索/打印匹配模式 1 的行,搜索匹配模式 2 的行并打印该行以及从该行到模式 3 的所有行(如果它包含/打印具有模式 3 的行,我现在可以了),并搜索/打印匹配模式 4 的行。
上述所有模式都应该在文件中按顺序(模式 1、2、3、4)出现数百次,我需要保持它们的顺序。
模式 1:以 1-5 开头的行和一个空格(尽管看起来很模糊,但这已经足够具体了) 模式 2:以(全部大写)开头的行 解决方案: 模式 3:以(全部大写)COMPLIANCE 开头的行: 模式 4:以 IP 地址开头的行
这是我拼凑起来的,但它显然不起作用:
#!/bin/bash
#
sed '
/^[1-5]\s/p {
/^SOLUTION/,/^COMPLIANCE/p {
/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/p }
}' sample.txt
【问题讨论】:
-
将
sample.txt中的几行添加到您的问题中。 -
grep 用于在文件中查找 RE 并打印匹配的行。 sed 用于对文件中的各个行进行简单替换。对于其他任何事情,您应该只使用 awk。发布一些示例输入和预期输出,我们可以为您提供帮助。例如,如果您点击了以数字 1-5 开头的 2 行,并且在以 SOLUTION 开头的第一行之前有一个空格怎么办?你忽略第一个还是什么?找到匹配的行总是微不足道的,它处理看起来相似但不匹配的行很复杂,所以创建您的示例输入以显示 THAT。