使用 AWK,如果列中的字符串以特定字符串开头,则打印 $1(第一列)?

Rau*_*lla 1 regex bash awk

首先我想说,我知道 StackOverflow 上有很多关于 AWK 和正则表达式的问题。我已经尝试搜索不同的问题和答案,测试了多个答案,但没有一个有效。

我有一个由命令生成的列表:

iostat -dx | awk ' { print $1 }'
Run Code Online (Sandbox Code Playgroud)

它输出以下内容:

extended
device
ada0
ada1
ada2
pass0
pass1
pass2
Run Code Online (Sandbox Code Playgroud)

我只想输出以 ada... ada0、ada1、ada2 开头的行。

以下是我尝试过的一些命令,它们都没有输出:

iostat -dx | awk '($1 == "^ada") { print $1 }'
iostat -dx | awk '($1 == "/^ada.*$/") { print $1 }'
Run Code Online (Sandbox Code Playgroud)

这个输出device(??):

iostat -dx | awk '($1 ~ /^d[ada]*/ ) { print $1 }'
Run Code Online (Sandbox Code Playgroud)

重要提示:我不能为此使用 grep,因为这是在没有 GREP、只有 AWK 的 Docker 映像上运行的。我非常清楚命令“iostat -x | grep "ada" | awk '{print $1}'”,但不幸的是我不能使用它。

Bar*_*mar 5

正则表达式应该只是^ada,就像您第一次尝试一样。但是正则表达式应该在里面//,而不是引号,并且你必须使用~它来比较它。

iostat -dx | awk '$1 ~ /^ada/ { print $1 }'
Run Code Online (Sandbox Code Playgroud)