gpt4 book ai didi

regex - 如何在 AWK 中使用正则表达式作为字段分隔符?

转载 作者:行者123 更新时间:2023-12-02 15:12:07 24 4
gpt4 key购买 nike

我读了another answer展示了如何使用 -F 标志设置字段分隔符:

awk -F 'INFORMATION DATA ' '{print $2}' t

现在我很好奇如何使用正则表达式作为字段分隔符。我的尝试可以在下面看到:

$ echo "1 2 foo\n2 3 bar\n42 2 baz"
1 2 foo
2 3 bar
42 2 baz
$ echo "1 2 foo\n2 3 bar\n42 2 baz" | awk -F '\d+ \d+ ' '{ print $2 }'
# 3 blank lines

我期望得到以下输出:

foo
bar
baz

这是因为我的正则表达式 \d+\d+ 匹配“由空格分隔的前 2 个数字,后跟一个空格”。但我正在打印第二条记录。如图所示 rubular :

enter image description here

  • 如何使用正则表达式作为 awk 字段分隔符?

最佳答案

首先 echo 不会自动转义并输出文字 \n。所以你需要添加 -e 来启用转义。其次 awk 不支持 \d 所以你必须使用 [0-9][[:digit: ]].

echo -e "1 2 foo\n2 3 bar\n42 2 baz" | awk -F '[0-9]+ [0-9]+ ' '{ print $2 }'

echo -e "1 2 foo\n2 3 bar\n42 2 baz" | awk -F '[[:digit:]]+ [[:digit:]]+ ' '{ print $2 }'

两个输出:

foo
bar
baz

关于regex - 如何在 AWK 中使用正则表达式作为字段分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43081558/

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