Pra*_*mar 2 command-line awk text-processing
我正在使用该命令来获取登录我机器的用户列表,但我无法理解该命令的含义。
awk -F':' '$2 ~ "\$" {print $1}' /etc/shadow
Run Code Online (Sandbox Code Playgroud)
该命令不会输出登录到机器的用户列表;事实上,该命令将解析/etc/shadow,它没有登录到机器的用户的概念。
该命令将输出为其帐户设置了密码的用户列表。
这是命令分解(请注意,这是特指 MAWK,它是安装在 Ubuntu 上的 AWK 版本,其中指定包含在 中的模式""是正确的,并且需要与包含在 中的模式所需的相同转义//,如 中所述man mawk):
-F':': 将字段分隔符(对应于 AWK 的内部FS变量)设置为:; 这意味着每个记录的(或本例中的行)字段将在:字符上拆分,并且诸如$1, $2, $3, ... 之类的引用将分别引用当前记录的第一个以冒号分隔的字符串,第二个以冒号分隔的字符串当前记录的字符串,当前记录的第三个冒号分隔的字符串,...。
$2 ~ "\$":这是所谓的“模式”;这是每次处理记录时评估的条件。这种情况下的条件是:如果第二个字段与正则表达式匹配\$(即如果第二个字段包含字符$),则执行以下“操作”。
{print $1}:这就是所谓的“行动”;它是一个代码块,每次前一个条件评估为 TRUE 时都会执行该代码块。它打印第一个字段。
它不会显示登录到您机器的用户,而是显示设置了密码的用户帐户。请注意,如果您使用gawk代替mawk,则"\$"需要更正为/\$/或"\\$"。
-F: : 使用冒号作为分隔符$2 ~ /\$/ :第二个字段(密码)是否包含美元符号print $1 : 然后打印第一个字段(用户名)用户登录的事实不存储在/etc/shadow.