使用linux命令从文件中提取数据的最后一部分

时间:2019-10-29 07:26:56

标签: linux awk sed

我的输入文件(myfile)为:

>> Vi 'x' found in file /data/152.916612:2,/proforma invoice.doc
>> Vi 'x' found in file /data/152.48152834/Bank T.T Copy 12 d3d.doc
>> Vi 'x' found in file /data/155071755/Bank T.T Copy.doc
>> Vi 'x' found in file /data/1521/Quotation Request.doc
>> Vi 'x' found in file /data/15.462/Quotation Request 2ds.doc
>> Vi 'y' found in file /data/15.22649962_test4/Quotation Request 33  zz (.doc
>> Vi 'x' found in file /data/15.226462_test6/Quotation Request.doc

我需要提取“在文件中找到”一词之后的所有数据以具有此功能 输出:

/data/152.18224487:2,S/proforma invoice.doc
/data/152.916612:2,/proforma invoice.doc
/data/152.48152834/Bank T.T Copy 12 d3d.doc
/data/155071755/Bank T.T Copy.doc
/data/1521/Quotation Request.doc
/data/15.462/Quotation Request 2ds.doc
/data/15.22649962_test4/Quotation Request 33  zz (.doc
/data/15.226462_test6/Quotation Request.doc   

我正在使用这个

grep "" myfile  |   awk '{print $7" "$8" "$9" "$10}'

它可以工作,但并非在所有情况下都有效,即,如果有很多空格,则不会返回最新单词。

还有其他更好的方法来获得相同的输出吗?

1 个答案:

答案 0 :(得分:2)

第一个解决方案: 这应该通过awk轻松完成。

awk '{sub(/.*found in file/,"")} 1'  Input_file

第二种解决方案: 或者更精确地说,将其作为字段分隔符:)

awk -F"found in file" '{print $2}'  Input_file

第三个​​解决方案: 使用sed

sed 's/.*found in file\(.*\)/\1/' Input_file

第四种解决方案: :使用match的{​​{1}}功能。

awk

第五个解决方案: :使用awk 'match($0,/found in file/){print substr($0,RSTART+RLENGTH+1)}' Input_file 的{​​{1}}选项(已通过提供的示例进行了测试)。

grep