我想从打印中排除苹果和香蕉之间包含“葡萄”或“橙色”的行。 但是,如果我的输入是
apple grape banana orange banana
这仍然是真的
awk '/apple.*banana/ && !(/grape|orange/) {print}' fruits > filtered_fruits
如何设置通配符,使其仅指向第一个香蕉? 最好使用 awk 命令。 预先感谢
这不会从您提供的一行示例输入中产生任何输出,我猜这可能是该行的预期行为,但这当然并不意味着它有效(无限数量的脚本也可能不产生输出,包括
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