我有一些文字,我想抓住所有文本到年份,包括在内。我尝试过这样的事情
awk '/[1-2][0-9][0-9][0-9]/{print $1}'
但是只打印第一个"字"输入
"Financial summary 1997 FINAL.doc" => "Financial"
"v4 Minutes 19950705" => "v4"
我想要的是"财务摘要1997"和" v4分钟1995"。我已经玩过$ NF和其他各种没有成功但我还不知道有多少单词,或者有多少单词,所以我不能打印$ 1 $ 2 $ 3 。我不必使用awk,但它会很有用,因为我实际上打算用一些周围的标签打印结果输出到HTML文件。
我可以将字段分隔符设置为" 4位"但是丢弃了这一年
awk -F[1-2][0-9][0-9][0-9] '{print $1}
编辑: 这就是我最终得到的结果,然后又回来看看发布的解决方案:
awk 'match($0,/.*(19|20)[0-9]{2}/){print substr($0,RSTART,RLENGTH)}'
全部谢谢
答案 0 :(得分:2)
您可以使用此grep
命令:
grep -oE '[^"]* [1-2][0-9]{3}' file
Financial summary 1997
v4 Minutes 1995
对于awk
,您可以使用gensub
:
awk '{ print substr(gensub(/^(.* [1-2][0-9]{3}).*/, "\\1", "1"), 2) }' file
Financial summary 1997
v4 Minutes 1995
答案 1 :(得分:1)
awk 解决方案:
container.variables
输出:
awk 'match($0,/.*\<[12][0-9]{3}/){ print substr($0,RSTART,RLENGTH)"\042" }' file
答案 2 :(得分:0)
关注awk
可以帮助您。
awk 'match($0,/.*[1-2][0-9][0-9][0-9]/){print substr($0,RSTART,RLENGTH) s1}' s1="\"" Input_file
说明: 使用此match
awk
实用程序来匹配此处的正则表达式,这将查找到[1-2][0-9][0-9][0-9]
然后是找到任何match
正则表达式,然后设置RSTART
和RLENGTH
变量的值(awk
的开箱变量),然后打印该行的子字符串point是RSTART
的值,直到RLENGTH
。
答案 3 :(得分:0)
sed -r 's/(.*[1-2][0-9][0-9][0-9]).*/\1"/' input
"Financial summary 1997"
"v4 Minutes 1995"
答案 4 :(得分:0)
awk '{sub(/97/,"97\"");print $1,$2,$3}' file
"Financial summary 1997"
"v4 Minutes 19950705"
我们所要做的就是打印三个第一个字段 并在1997年之后添加双引号。在
的帮助下sub添加了double,但必须先将其转义为“\” 就是这样。