如何解决如何有条件地匹配行的最后一部分?
我对perl还是很陌生,目前我正在使用一个非常简单的perl正则表达式来打印从文件 1.txt 中读取的字符串“ Lecture”之后的最后一行。 >
cat 1.txt | perl -ne 'print "$1 \n" while /Lecture\s+(\d+\w)/g;'
它运作良好,但我需要为其添加一个简单条件:
“首选项”始终在字符串“讲座”之后打印字符。 如果在一行中找不到字符串“ Lecture”,则只需在该行的末尾打印字符。
PS:可能会出现字符串“ Lecture”在其周围没有空格的情况,并且在我整个过程中都使用文字字符,因为它不一定是纯数字,而是字母数字。
示例
猫1.txt
Some Topic 1 Lecture 001
Some Topic 2 Lecture 002
Topic 3 ( classroom Session ) Lecture2B
Practicals 07A
Submissions 10
Topic5Lecture4
预期输出:
001
002
2B
07A
10
4
我最好要有一个可以直接在cli / console中运行的解决方案。 (就像我的原始代码-cat 1.txt | perl code
一样)。
我不想执行单独的.pl文件。
解决方法
此
(?:\w*Lecture)?([^\s]+)$
将在行((...)
)的末尾捕获(+
)所有([^\s]
)非空格($
),
可选({{1)}之前未捕获的(?
)“讲座”,即使((?:...)
之前还有其他字母。
它将获得所需的输出:
\w*
对于示例输入:
001
002
2B
07A
10
4
4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。