我尝试在 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/