• awk正则表达式 ```shell

    匹配第一个字段是8个字符的行

    tail /etc/services | awk ‘/^[a-z0-9]{8} / {print}’ #有空格 iqobject 48619/tcp # iqobject iqobject 48619/udp # iqobject matahari 49000/tcp # Matahari Broker

匹配记录中包含blp5和tcp的行

tail /etc/services | awk ‘/blp5/ && /tcp/ {print}’ blp5 48129/tcp # Bloomberg locator

匹配记录中包含blp5或tcp的行

tail /etc/services | awk ‘/blp5/ || /tcp/ {print}’ 3gpp-cbsp 48049/tcp # 3GPP Cell Broadcast Service Protocol

不匹配开头是#和空行

tail /etc/services | awk ‘! /^#/ && ! /^$/ {print}’ or tail /etc/services | awk ‘!/^#|^$/ {print}’ or tail /etc/services | awk ‘/^[^#]|”^$”/ {print}’

匹配范围

tail /etc/services | awk ‘/^blp5/,/^com/‘|head blp5 48129/tcp # Bloomberg locator blp5 48129/udp # Bloomberg locator com-bardac-dw 48556/tcp # com-bardac-dw

  1. - **三目运算符(简写条件表达式)**
  2. ```shell
  3. expr1 ? expr2 : expr3
  4. #第一个表达式为真,执行expr2,否则执行expr3
  5. awk 'BEGIN{print 1==1?"yes":"no"}' # 三目运算作为一个表达式,里面不允许写print
  6. #yes
  7. seq 3 |awk '{print $0==2?"yes":"no"}'
  8. #for i in `seq 1 6`;do echo $i | awk '{print $i==2?"yes":"no"}';done
  9. #no
  10. #yes
  11. #no