删除文件中的多个字符串/字符

时间:2015-05-14 07:36:10

标签: awk sed

我有一个类似下面生成的卷曲输出,我正在使用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.....

有没有办法可以删除中间的单词/逗号/分号,这样我才能保留这些值?

3 个答案:

答案 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,因为您不想拥有它。