【问题标题】:Printing lines from a file where a specific field does not start with something从文件中打印特定字段不以某些内容开头的行
【发布时间】:2010-09-13 13:42:14
【问题描述】:
我想打印第三个字段(由 : 分隔的字段)不以 # 开头的所有行(表示第三个字段是注释)。请注意:和#之间可能有空格。
示例输入:
A:B:#hdfghdfg
A:B: #dfdfdfg
A:B:C
期望的输出:
A:B:C
我试过了:
awk -F : '$3 ~ /^#/ { print }' run_out5 > run_out6
但它不起作用
谢谢,
贾格拉蒂
【问题讨论】:
标签:
linux
unix
scripting
sed
awk
【解决方案1】:
正则表达式可能更简洁:
awk -F: '$3 !~ /^ ?#/ { print }'
通常最好期待重复的空格(空格或制表符)而不是单个空格字符,后者在打印输出中看起来可能相同。
awk -F: '$3 !~ /^[[:space:]]*#/ { print }'
【解决方案2】:
使用!~ 选择与正则表达式不匹配的行。
调整正则表达式,使其匹配带有前导空格的字段。
awk -F : '$3 !~ /^ *#/ {print}'