gpt4 book ai didi

unix - 在一行中 Grep 多个字符串

转载 作者:行者123 更新时间:2023-12-05 00:46:07 25 4
gpt4 key购买 nike

我试图在一行中定位两个字符串。下面是示例行。

line1: xxxx yyyy time1-12 zzzz time2-13
line2: xxxx yyyy time1-14 zzzz time2-15

我正在使用下面的 grep 命令来实现这一点

grep -o -E 'time1-[0-9]*|time2-[0-9]*' timetest.txt

这给我的输出是

time1-12
time2-13
time1-14
time2-15

但是我想要这样

time1-12 time2-13
time1-14 time2-15

我在这里缺少什么?我可以使用 awk 还是 sed 来获得这个输出

最佳答案

使用 GNU awk 来匹配第三个参数():

$ awk 'match($0,/time1-[0-9]*/,a) && match($0,/time2-[0-9]*/,b) { print a[0], b[0] }' file
time1-12 time2-13
time1-14 time2-15

注意time1和time2可以任意顺序就行。对于其他 awk,您需要使用 substr() 来提取 match() 结果:

$ awk 'match($0,/time1-[0-9]*/) && (a=substr($0,RSTART,RLENGTH)) && match($0,/time2-[0-9]*/) { print a, substr($0,RSTART,RLENGTH) }' file
time1-12 time2-13
time1-14 time2-15

如果这 2 次总是以相同的顺序进行,那么使用 gawk 你可以这样做:

$ awk 'match($0,/(time1-[0-9]*).*(time2-[0-9]*)/,a) { print a[1], a[2] }' file
time1-12 time2-13
time1-14 time2-15

但是这只是对单独一行的简单替换,所以你也可以只使用 sed:

$ sed -r 's/.*(time1-[0-9]*).*(time2-[0-9]*).*/\1 \2/' file
time1-12 time2-13
time1-14 time2-15

关于unix - 在一行中 Grep 多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33148292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com