我想使用 GREP 搜索文件中的“User-Agent: UA”,然后提取上面最接近的包含“Via:”的行 我的问题是有时有多行包含“Via:”,但我只需要最后一个。
例如要解析的文件:
Via: 1.1.1.1
not relevant line
...
not relevant line N
User-Agent: UA
...
Via: 2.2.2.2
Via: 3.3.3.3
not relevant line
...
not relevant line N
User-Agent: UA
...
Via: 4.4.4.4
Via: 5.5.5.5
Via: 6.6.6.6
not relevant line
...
not relevant line N
User-Agent: UA
我想要的结果是包含最接近“User-Agent:UA”的“Via:”的行
Via: 1.1.1.1
Via: 3.3.3.3
Via: 6.6.6.6
任何帮助将不胜感激。
答案1
awk
你可以这样做:
awk '/Via/ {via_line=$0} /User-Agent: UA/ {print via_line}' input_file
因此,我们将找到包含Via
并存储该行的每一行,覆盖任何先前的行,然后当我们找到该User-Agent: UA
行时,打印我们为该Via
行存储的所有内容。
答案2
使用 sed:
sed -n '/^Via/h;/^User-Agent: UA$/{g;p;}' file
输出:
通过:1.1.1.1 途径:3.3.3.3 途径:6.6.6.6
使用 禁止自动打印图案空间-n
。如果一行以Via
复制模式空格开头以保存空格 ( h
)。这会覆盖保留空间。如果一行包含“User-Agent: UA”,则将保留空间复制到模式空间 ( g
) 并打印模式空间 ( p
)。