在Unix上编辑文本文件

时间:2014-08-19 13:47:03

标签: linux unix

我有一个文本文件,格式如下:

Wind River Linux glibc_cgl (cgl) 3.0.3       


Build label: NDPGSN_5_0_SRC_GSN_LINUX_GPBOS_2
Build host: eselnvlx1114                     
Build date: Mon Mar 18 23:24:08 CET 2013     
Installed: Fri Jun 20 02:22:08 EEST 2014     
Last login: Fri Aug  8 11:37:08 2014 from 172
gsh list_imsins                              
=== sysadm@eqm01s14p2 ANCB ~ # gsh list_imsin
ps Class    Identifiers               |      
---------------------------------------      
A  imsins   -imsi  20201                     
A  imsins   -imsi  20205                     
A  imsins   -imsi  20210                     
A  imsins   -imsi  204045                     

我想提取-imsi旁边的数字。输出看起来像:

20201
20205
202210
204045

在此过程之后,输出进一步,我已经完成了。起初我被告知文本格式是静态的,所以我编写了以下脚本:

for (( r=1; r<5; r++));
do
  awk 'NR>12' IMSI$r.txt | awk '{print $NF "\r"}' > N$r
  awk 'NR>12' IMSI$r.txt | awk '{print $NF "\r"}' >> out

done

我有2个文件作为输出,因为我需要将它们用于其他目的。

有没有办法让脚本更灵活,处理动态文本文件?

作为一种可能的解决方案,是否可以让脚本查找短语-imsi并在其后获取记录?并继续这样做,直到它找到文件结束?

我尝试使用grepawk执行此操作,但我从未获得正确的输出。如果您有任何其他想法,请分享。

1 个答案:

答案 0 :(得分:1)

我会选择类似的东西:

$ awk '/-imsi/ {print $NF}' file
20201
20205
20210
204045

这将打印包含-imsi的那些行的最后一个单词。

您还可以使用带有后视的grep来打印-imsi之后的数字。

$ grep -Po '(?<=-imsi  )[0-9]*' file
20201
20205
20210
204045