regex - 如何在 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
解决方案
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 地址之间使用一个空格
推荐阅读
- python-3.x - 如何使用 django 模型将图像存储在数据库中
- reactjs - 为什么单击我的模态时,模型消失了
- azure - PNP PowerShell Connect-PnpOnline 与 -AccessToken 未在 Azure Functions 中设置连接
- python - “IntVar”对象没有“翻译”属性
- javascript - Angular中的异步管道
- mysql - MS SQL 选择有效的出现/忽略其他
- amazon-web-services - Vue.js、prerender-spa-plugin 和 AWS Amplify - 奇怪的重定向规则行为
- python - 如何更新 ipywidgets 布局中的 imshow?
- java - 使用 ON 子句对 Collection 进行 HQL 查询
- c++ - `(i & (i + 1)) - 1` 是什么意思?(在芬威克树)