powershell 如何在yaml中从列到行解析数据

ht4b089n  于 2022-12-13  发布在  Shell
关注(0)|答案(3)|浏览(207)

我从yaml文件中解析出来的最终数据在文本文件中是这样的:

- id: 200
          addr: 10.242.57.129/27
        - id: 210
          addr: 10.242.57.161/25
        - id: 300
          addr: 10.244.26.1/24

我想转换为这个并保存为txt与shell脚本(bash):

200,10.242.57.125,27
210,10.242.57.162,25
300,10.244.26.11,24

有人能帮我吗?
需要为此获取命令shell(使用awk、grep、sed ...)。
我使用了以下代码,但它不起作用:

grep -F -e "id:" | cut -c 14-16 -e "addr:" | cut -c 16-35 ip.txt | paste -d , - -
w80xi6nr

w80xi6nr1#

假设这个问题也标记为powershell,那么让我提供一个使用switch语句的本地PowerShell解决方案,它的功能类似于awk

switch -Regex -File file.txt {
  '\bid: (\d+)'            { $id = $Matches.1  }
  '\baddr: ([\d.]+)/(\d+)' { '{0},{1},{2}' -f $id, $Matches.1, $Matches.2  }
}
  • 自动变量$Matches用于访问分支条件正则表达式匹配的内容。
  • -f运算符用于设置输出字符串的格式。
ecbunoof

ecbunoof2#

使用GNU sed

$ sed -E '/-/{N;s~[^0-9]*([0-9]+)\n[^0-9]*([0-9.]+)/([0-9]+)~\1,\2,\3~}' input_file
200,10.242.57.129,27
210,10.242.57.161,25
300,10.244.26.1,24
wj8zmpe1

wj8zmpe13#

这可能对你有用(GNU sed):

sed 'N;s/[^0-9.\n/]//g;y/\n\//,,/' file

追加下一行。
删除除ID和地址以外的所有内容。
将新行和/替换为,的。

相关问题