awk 通配符仅打印第一个输出

问题描述 投票:0回答:1

我想从打印中排除苹果和香蕉之间包含“葡萄”或“橙色”的行。 但是,如果我的输入是

apple grape banana orange banana

这仍然是真的

awk '/apple.*banana/ && !(/grape|orange/) {print}' fruits > filtered_fruits

如何设置通配符,使其仅指向第一个香蕉? 最好使用 awk 命令。 预先感谢

shell awk sed
1个回答
0
投票

这不会从您提供的一行示例输入中产生任何输出,我猜这可能是该行的预期行为,但这当然并不意味着它有效(无限数量的脚本也可能不产生输出,包括

awk '0' file
!),您必须想出一些满足您的要求的其他输入/输出并进行测试以找出答案:

$ awk '
    { r=" "$0" "; gsub(/[[:space:]]+/,"  ",r) }
    !( \
        match(r,/ apple /) && r=substr(r,RSTART) && \
        match(r,/ banana /) && r=substr(r,1,RSTART+RLENGTH) && \
        (r ~ / (grape|orange) /) \
    )
' file
© www.soinside.com 2019 - 2024. All rights reserved.