我有一个这样的文本文件:
Attribute 1.............. : attribute value
Encode Date............................. : JUL 2007
Attribute 22076.......... : attribute value`
我想提取该JUL 2007
段,但仅当它前面Encode Date
有 JUL 2007 可能出现在文件的其他位置时。
在 regexr.com 上使用启用了全局和多行模式的 PHP 解释器进行测试时,下面的这个正则表达式可以工作:
(?<=Encode Date............................. : ).*$
但是运行这个命令没有输出,我错过了什么?
cat file.txt | awk '/(?<=Encode Date............................. : ).*$/{print $0}'
awk
支持POSIX 扩展正则表达式(ERE)。您尝试使用的是与 Perl 兼容的正则表达式 (PCRE)。ERE中没有(?<=...)
(“后视断言”)。要从输入中获取编码日期,请考虑
这将每一行视为
:
- 分隔的字段。它挑选出第一个这样的字段以字符串Encode Date
开头的行,并在打印之前删除该行第二个字段开头的空格。使用
sed
,它会稍微短一些:这会找到正确的行,然后删除直到并包括
:
紧随其后的空格的所有内容,并输出修改后的行。或者,使用等效的
sed
操作尝试修改每一行并打印成功修改的行,如果你想打印整行(就像你的最后一个命令似乎想要做的那样),然后使用
或者,
或者,
有关的: