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


16

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

例如:

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

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

行示例:

Linux1-new  36352 Version:true
Linux1-1625543  9847
Linux1:16254 8467563 

备注-空格或TAB可能在第一次提交之前

Answers:


15

单程:

echo "Linux1_ver2  12542 kernel-update"  |  awk '$1 ~ /^ *Linux1/'

$ 1和^是多余的。您的提案不包含标签。
Hauke Laging

@HuakeLaging您为什么认为$ 1和^是多余的?我很确定都需要两个单词,以便仅将第一个单词与之匹配,并且使匹配锚定在开头(例如,“ / Linux1 /”可以匹配“ mLinux”,但不能由“ / ^ Linux /”匹配)。
尼克·布尔

19

分配字段时,awk会忽略前导空格。默认命令是print。

awk '$1 ~ /^Linux1/'

是你想要的。

详细说明:

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

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


2

这应该适用于此特定情况。

awk '/^[[:blank:]]*Linux1/ {print}'

但是,如果Linux1之前的空间不匹配
yael 2013年

@yael我进行了修改以更正此错误。
Hauke Laging

+1对任何想知道此语法在做什么的人来说:这是“仅当正则表达式与该行匹配时才在括号内执行操作”。
user541686 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.