![提取具有特定前缀的单词](https://linux22.com/image/185620/%E6%8F%90%E5%8F%96%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E5%89%8D%E7%BC%80%E7%9A%84%E5%8D%95%E8%AF%8D.png)
我有一个文件,其中包含以下行:
27/12/20 | 05:50:48pm | abcdefgh |ID:1:418856791 | jack | 1.1.1.1:1111 | IN | GN-4536 | LOL | 0
27/12/20 | 05:51:44pm | abcdefgh |ID:1:503729784 | jill | 2.2.2.2:2222 | IN | GN-497187 | LOL2 | 0
有一个包含这样几行的大文件。如何仅从该文件中提取GN-4536
和?GN-497187
好像它可以是任何东西GN<-numbers>
。如何获得如下格式的输出:
GN-number
GN-number
GN-number
GN-number
我尝试使用sed
和grep
命令,但它可以提取数字。
答案1
这很容易cut
:
$ cut -f8 -d'|' filename
GN-4536
GN-497187
这切断了由(必须从 shell 中转义)限制的字段8
。f
d
|
但它留下了空白。你可以用 剥离它tr
。
$ cut -f8 -d'|' filename | tr -d ' '
GN-4536
GN-497187
答案2
我们可以尝试使用下面的命令,经过测试并且工作正常
awk '{for(i=1;i<=NF;i++){if($i ~ /^GN-[0-9]*$/){print $i}}}' filename
输出
GN-4536
GN-497187