用awk regexp排除哈希标志

时间:2015-06-06 17:49:57

标签: regex awk

我有一个包含以下内容的文件:

#sometext=0 sometext=1 #sometext=5 sometext=34

并且无法获得

sometext=1
sometext=34

我试过了:

for (i=1; i<=4; i++){ 
   if ($i ~ /[^#]sometext=/){
   print $i
   }
}

但这不起作用

3 个答案:

答案 0 :(得分:1)

你可以这样做

awk '{ for (i=1;i<=NF;i++) if ( $i ~ /^sometext=/ ) print $i }'

它的作用是什么?

  • for (i=0;i<=NF;i++)遍历每一栏

    • NF,字段数是每行中的字段总数
  • if ( $i ~ /^sometext=/ )检查相应的列是否以sometext=开头

<强>测试

$ echo "#sometext=0 sometext=1 #sometext=5 sometext=34" | awk '{ for (i=1;i<=NF;i++) if ( $i ~ /^sometext=/ ) print $i }'
sometext=1
sometext=34

答案 1 :(得分:1)

如何使用简单? sed

$echo "#sometext=0 sometext=1 #sometext=5 sometext=34" | sed 's/#[^ ]*//g'  

sometext = 1 sometext = 34

答案 2 :(得分:0)

或者是另一个比@ nu11p01n73R的答案更精简的awk版本:

echo "#sometext=0 sometext=1 #sometext=5 sometext=34" | awk '
    BEGIN{RS=" "}
    /^sometext/{print}
'

将由空格分隔的所有内容标记为新的“记录”,仅打印 sometext 开头的记录。