我有一个类似下面生成的卷曲输出,我正在使用SED / AWK脚本来消除不需要的字符串。
文件
{id":"54bef907-d17e-4633-88be-49fa738b092d","name":"AA","description","name":"AAxxxxxx","enabled":true}
{id":"20000000000000000000000000000000","name":"BB","description","name":"BBxxxxxx","enabled":true}
{id":"542ndf07-d19e-2233-87gf-49fa738b092d","name":"AA","description","name":"CCxxxxxx","enabled":true}
{id":"20000000000000000000000000000000","name":"BB","description","name":"DDxxxxxx","enabled":true}
......
我想修改此文件并保留以下类似内容,
AA AAxxxxxx
BB BBxxxxxx
AA CCxxxxxx
BB DDxxxxxx
AA n.....
BB n.....
有没有办法可以删除中间的单词/逗号/分号,这样我才能保留这些值?
答案 0 :(得分:3)
试试这个awk
curl your_command | awk -F\" '{print $(NF-9),$(NF-3)}'
或者:
curl your_command | awk -F\" '{print $7,$13}'
使用perl
的语义方法:
curl your_command | perl -lane '/"name":"(\w+)".*"name":"(\w+)"/;print $1." ".$2'
对于任意数量的name
次发生:
curl your_command | perl -lane 'printf $_." " for ( $_ =~ /"name":"(\w+)"/g);print ""'
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed -r 's/.*("name":")([^"]*)".*\1([^"]*)".*/\2 \3/p;d' file
这将提取两个name
键后面的字段,并在成功时打印它们。
或者,简单地进行模式匹配:
sed -r 's/.*:.*:"([^"]*)".*:"([^"]*)".*:.*/\1 \2/p;d' file
答案 2 :(得分:0)
在这种特殊情况下,你可以做到
awk -F ":|," '{print $4,$7}' file2 |tr -d '"'
并获取
AA AAxxxxxx
BB BBxxxxxx
AA CCxxxxxx
BB DDxxxxxx
此处,字段分隔符为:
或,
,我们打印第四个和第七个字段(因为所有行都包含这两个字段中的条目),最后,我们使用{{1} }删除tr
,因为您不想拥有它。