regex - 如何在 Linux 命令行上使用正则表达式过滤文本文件中以大写字母开头并以正整数结尾的行?

标签 regex linux grep

我尝试在 Linux 终端中使用 Regex 和 grep 命令来过滤文本文件中以大写字母开头并以正整数结尾的行。有没有一种方法可以修改我的命令,以便它通过一次 grep 调用而不是两次调用在一行中完成所有这一切?我正在使用适用于 Linux 的 Windows 子系统和微软商店 ubuntu。

文本文件:

C line 1
c line 2
B line 3
d line 4
E line five

我已经开始工作的命令:

grep ^[A-Z] cap*| grep [0-9]$ cap*

输出

C line 1
B line 3

这可行,但我觉得正则表达式语句可以以某种方式组合,但是

grep ^[A-Z][0-9]$ 

不会产生与上面命令相同的结果。

最佳答案

您需要使用

grep '^[A-Z].*[0-9]$'
grep '^[[:upper:]].*[0-9]$'

请参阅online demo 。正则表达式匹配:

  • ^ - 字符串开头
  • [A-Z]/[[:upper:]] - 大写字母
  • .* - 任何零个或多个字符([^0-9]* 匹配零个或多个非数字字符)
  • [0-9] - 数字。
  • $ - 字符串结尾。

此外,如果要确保字符串末尾的数字之前没有 -,则需要使用否定括号表达式,例如

grep -E '^[[:upper:]](.*[^-0-9])?[1-9][0-9]*$'

这里,POSIX ERE regx(由于 -E 选项)匹配

  • ^[[:upper:]] - 开头为大写字母,然后
  • (.*[^-0-9])? - 任意文本的可选出现,然后是除数字和 -
  • 之外的任何字符
  • [1-9] - 非零数字
  • [0-9]* - 零个或多个数字
  • $ - 字符串结尾。

关于regex - 如何在 Linux 命令行上使用正则表达式过滤文本文件中以大写字母开头并以正整数结尾的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70429182/

相关文章:

linux - 如何对特定字段进行 grep 而不是整行

python - python 中包含整数和字符串的列表

c - gcc - 在 bss 中编写和执行代码 - 设置权限标志

linux - 通过 TCP 快速发送/接收数据会导致阻塞

linux - 如何减去 2 个日志文件中两个时间戳的差异

regex - 使用grep仅提取整个单词

c++ - 冲突的正则表达式结果

javascript - 为什么此正则表达式不适用于东方阿拉伯数字?

java - Java Scanner 中的非捕获组被忽略

html - 使用 sed 删除 html 表格列