linux - Linux 中匹配数据然后打印某些数据的最佳命令

标签 linux bash awk sed

我希望读取/etc/shadow 文件并删除第二个字段中等于 * 或 !并且第 5 个字段中的任何内容不等于 90,然后打印出第 1 个字段、第 5 个字段和第 6 个字段,并在每行的末尾添加主机名并将其输出到文件中。我不确定这里的最佳选择是什么....

/etc/shadow 文件示例

foo:$6$91s00atqlok0b861$7IJdhycBWBwipe82y6kaoXnAbwqhJNPyxXIiWzCFpb0um2aEquBKIaH5OAlGRAeua2F6jk6qQiicpC21aiTvt.:12345:7:90:7:30::
foofoo:!!:123456:0:90:7:::   
foofoofoo:$6$5WSZ.Gde$RGkaObncaycypz9.wnerXauAPyIqyDQzh9cyUPuZ4LiNfRDGIS5DasngA5x51HPczH9NsE8mvkClIOs7a1K3p0:1234:0:99999:7:::

输出

foofoofoo, 99999, 7, hostname 

Field1=username<br/> Field2=password<br/> Field5=# days p/w needs to be changed<br/> Field6=# of days to warn

非常感谢

最佳答案

如果我答对了你的问题,这就是你要找的东西:

awk -v hostname=$(hostname) -F: '{ if ($2 != "*" && $2 != "!" && $5 == "90") { printf("%s %s %s %s\n", $1, $5, $6, hostname)}}' /etc/shadow >output

关于linux - Linux 中匹配数据然后打印某些数据的最佳命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41988448/

相关文章:

bash - 想要通过将命令的输出重定向到变量来检查命令是否成功

linux - 如何在 awk 中运行 grep?

php - 安装 mqseries PHP 时出现问题 - Ubuntu

linux - 运行 linux 命令成功但在 .sh 文件中失败。 "No such file or directory "

linux - 从 $PATH 变量中删除冗余路径

linux - bash:更改我自己的密码(不使用 root)

git - 如何打印 git 存储库中每个文件的最后提交信息

sed - 将新行视为另一个字符的 grep/sed 的替代方案

bash - 如何在 Bash 中替换文件每行中除最后 n 个实例之外的所有字符实例

c - 为 Linux 内核编写内置对象?