从下面的文本中,我想获取模式 ALPHABATES-由连字符数字分隔,例如在此文件"MGRAPP-713"中(每个文件都会发生变化,但模式将保持不变(
123.txt报告:限制CBD [贾瓦德·哈米德] [2018-01-31 16:31:00 -0500]'在此输入代码'调试 [贾瓦德·哈米德] [2018-01-31 16:09:08 -0500]调试 [贾瓦德·哈米德] [2018-01-31 15:59:52 -0500]来自 HotelKey/MGRAPP-713 的合并拉取请求 #65 [GitHub] [2018-01-31 11:35:30 0100]MGRAPP-713 [萨布里奥] [2018-01-30 15:30:56 +0100]
我正在使用:grep '[A-Z0-9-]' 123.txt
你的问题不是很清楚。 你一直在寻找那个特定的字符串吗? 你想要整条线,还是只想要那个字段? 您要查找的字符串是否总是位于行首?
根据我对你的意思的猜测,我建议:
$ awk '/^[A-Z]+-[0-9]/ {print $1}' mgrapp
MGRAPP-713
每当您想打印与图案匹配的线条的一部分时,awk 都是您的朋友。
编辑
在您的评论中,您在一定程度上澄清了您的目标。 这是一个稍微复杂的解决方案:
$ awk '/^[A-Z]+-[0-9]/ {
match($1, /^[A-Z]+-[0-9]+/)
printf "%.*sn", RLENGTH, $1 }' mgrapp
MGRAPP-713
但我不能为你编写程序。 我只是在演示awk允许您编写简单的程序来从文本文件中获取字符串。 像任何强大的工具一样,学习需要时间。 这是值得花费的时间,因为,你知道,"运气偏爱有准备的头脑。
使用这个:
[A-Z]+-[0-9]+
[A-Z]+
-- 用于匹配所有大写字母,
-
-- 对于连字符,
[0-9]+
-- 用于数字