首页 > 解决方案 > 如何在 Linux 中读取文件并获取某些行

问题描述

我有一个文件,它的内容如下:


abc.com.        IN A            10.10.40.94 ;10.120.40.61    ;10.60.3.135
def.com.            IN CNAME        some-domain.com.

xyz.com.        IN A            10.123.40.32    ;10.145.40.133    ;1.240.3.215
one.com.                IN CNAME        some-other-domain.com.

我想要做的是,获取所有行IN A并将它们打印到另一个文件,以便最终文件如下所示:

我尝试awk如下:

cat dev-mytaxi.com.zone | awk '{print $3}'

但是我怎样才能写入文件和下面提到的最终结果?

写入新文件的最终输出应如下所示:

abc.com 10.10.40.94 10.120.40.61 10.60.3.135
xyz.com 10.123.40.32 10.145.40.133 1.240.3.215

标签: regexlinuxbashawk

解决方案


awk您可以使用 custom尝试这个更简单的方法FS

awk -F '[.[:blank:]]+IN A[[:blank:]]+' 'NF > 1 {
gsub(/[;[:blank:]]+/, " ", $2); print $1, $2}' file
abc.com 10.10.40.94 10.120.40.61 10.60.3.135
xyz.com 10.123.40.32 10.145.40.133 1.240.3.215

这个怎么运作:

  • 在这里,我们使用正则表达式[.[:blank:]]+IN A[[:blank:]]+作为输入字段分隔符,它IN A通过两边被空格包围的文本来分割每条记录。
  • NF > 1仅适用于有IN A记录的行
  • gsub转换多个空格并;在 ip 地址之间使用一个空格

推荐阅读