gpt4 book ai didi

regex - AWK 程序使用正则表达式来计算匹配行

转载 作者:行者123 更新时间:2023-11-29 09:08:28 25 4
gpt4 key购买 nike

该程序应该计算以括号中的十进制数开头,包含大小写字母混合并以句点结尾的行数。

我有

BEGIN {x=0}
/^\([0-9[0-9]*) [A-Z][A-z]* [a-z][a-z]* \.$/ {x = x+1}
END{print x}

我将它们分成多条不同的线,因为我一直在运行 display(!d) 语句进行调试,试图找出答案。要运行我使用 awk -f programName.awk filename.txt感谢您的帮助。

更新

新代码阅读

BEGIN{x=0}
/^\([0-9]+\)[A-Za-z]+\.$/{x++}
END{print x}

我使用 vim EC.awk 来编辑它。awk -f EC.awk EC.txt 运行返回 1。EC.txt 包含 12 行中的 5 行应该计算在内。

输入文件vim EC.txt

(1) Line one, this should count.
(2)Line two. Should also count.
3 should not count..
4 not
(5)Yes.
(6). nope
7 OHHH mann
8 This suck
(9)Oh ya? YOU SUCK.
10 Cheaa
(11) BOI.
(12) WoW MoM. Print mofo.

更新代码

BEGIN{x=0}
/^\([0-9]+\).*?[A-Za-z]+\.$/{x++}
END{print x}

这给了我 6。我相信它的计数线 11 (11) BOI。正在打印线条以确保。

最佳答案

有关更简单、更清晰地表达意图并可感知区域设置(并不总是只匹配 ASCII 字母)的替代解决方案,请参阅 Ed Morton's helpful answer .

尝试以下(符合 POSIX 标准):

awk '/^\([0-9]+\).*([A-Z].*[a-z]|[a-z].*[A-Z]).*\.$/ { ++x } END { print x+0 }' file
  • ^\([0-9]+\) 匹配一行开头括号中的十进制数。

    <
  • \.$ 匹配一行结尾的文字句点。

  • .*([A-Z].*[a-z]|[a-z].*[A-Z]).* 匹配其间的任何字符串:

    • Either:包含至少 1 个大写字母后跟至少 1 个小写字母。
    • Or:包含至少 1 个小写字母后跟至少 1 个大写字母。
    • 因此,此表达式应匹配任何包含大小写字母任意混合 [ASCII-only] 字母的字符串,只要存在至少 1 个大写字母和 1 个小写字母即可。

至于为什么你的方法不起作用:

  • 您的初始解决方案尝试 [A-Z][A-z] *[a-z][a-z]* 仅匹配行中第一个 [ASCII] 字母为大写;换句话说:行中首字母为小写的行不匹配。
  • 您后来的解决方案尝试 [A-Za-z]+,由于使用了一个字符集 any 其字符匹配, 匹配包含 大写字母 小写字母的行,这就是 (11) BOI. 行也匹配的原因。

关于regex - AWK 程序使用正则表达式来计算匹配行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35760674/

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