首先我想说,我知道 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}'”,但不幸的是我不能使用它。
正则表达式应该只是^ada,就像您第一次尝试一样。但是正则表达式应该在里面//,而不是引号,并且你必须使用~它来比较它。
iostat -dx | awk '$1 ~ /^ada/ { print $1 }'
Run Code Online (Sandbox Code Playgroud)