awk + ​​仅当第一个字段以字符串作为 Linux1 开头时才打印行

yae*_*ael 26 awk text-processing

如果第一个字段以 Linux1 开头,如何打印该行

例如:

  echo Linux1_ver2  12542 kernel-update  |   awk '{if ($1 ~ Linux1 ) print $0;}'
Run Code Online (Sandbox Code Playgroud)

目标是打印该行,而第一个字段以 Linux1 开头

线路示例:

Linux1-new  36352 Version:true
Linux1-1625543  9847
Linux1:16254 8467563 
Run Code Online (Sandbox Code Playgroud)

备注 - 空格或制表符可以在第一次提交之前

Joh*_*han 28

awk 在分配字段时忽略前导空格。默认命令是打印。

awk '$1 ~ /^Linux1/'
Run Code Online (Sandbox Code Playgroud)

是你想要的。

详细解释:

  • $1 告诉 awk 查看第一个“列”。
  • ~ 告诉 awk 做一个正则表达式匹配 /..../ 是一个正则表达式。
  • RE 中包含字符串 Linux 和特殊字符 ^。
  • ^ 导致 RE 从头开始​​匹配(而不是匹配行中的任何位置)。

一起看:Awk 将在第一列的开头匹配一个带有“Linux”的正则表达式。


Gur*_*uru 21

单程:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'
Run Code Online (Sandbox Code Playgroud)

  • @HuakeLaging 为什么你认为 $1 和 ^ 是多余的?我很确定两者都是必需的,以便仅匹配第一个单词,并且匹配在开始时锚定(例如,“mLinux”可以由 /Linux1/ 匹配,但不能由 /^Linux/ 匹配)。 (2认同)