使用 grep 和 cut 过滤文本文件以仅显示以“m”、“w”或“s”开头的用户名及其主目录
Use grep and cut to filter text file to only display usernames that start with ‘m’ ‘w’ or ‘s’ and their home directories
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
sys:x:3:1:sys:/dev:/usr/sbin/nologin
games:x:5:2:games:/usr/games:/usr/sbin/nologin
mail:x:8:5:mail:/var/mail:/usr/sbin/nologin
www-data:x:33:3:www-data:/var/www:/usr/sbin/nologin
backup:x:34:2:backup:/var/backups:/usr/sbin/nologin
nobody:x:65534:1337:nobody:/nonexistent:/usr/sbin/nologin
syslog:x:101:1000::/home/syslog:/bin/false
whoopsie:x:109:99::/nonexistent:/bin/false
user:x:1000:1000:edco8700,,,,:/home/user:/bin/bash
sshd:x:116:1337::/var/run/sshd:/usr/sbin/nologin
ntp:x:117:99::/home/ntp:/bin/false
mysql:x:118:999:MySQL Server,,,:/nonexistent:/bin/false
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
这是一个 /etc/passwd 文件,我需要对其执行此命令。到目前为止我有:
cut -d: -f1,6 testPasswd.txt | grep ???
这将显示所有用户名和关联的文件夹,但我无法解决如何仅查找以 m、w、s 开头的用户名和打印整行的问题。
我试过 grep -o '^[mws]*'
和它的不同变体,但 none 奏效了。
有什么建议吗?
使用 awk 更容易:
awk 'BEGIN{FS=OFS=":"} ~ /^[mws]/{print , }' testPasswd.txt
sys:/dev
mail:/var/mail
www-data:/var/www
syslog:/home/syslog
whoopsie:/nonexistent
sshd:/var/run/sshd
mysql:/nonexistent
尝试
的变体
cut -d: -f1,6 testPasswd.txt | grep '^m\|^w\|^s'
或者更简洁地说,
cut -d: -f1,6 testPasswd.txt | grep '^[mws]'
这更简洁,尤其是当您有很多模式要匹配时。
当然,如果没有约束,awk 解决方案会更好。
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
sys:x:3:1:sys:/dev:/usr/sbin/nologin
games:x:5:2:games:/usr/games:/usr/sbin/nologin
mail:x:8:5:mail:/var/mail:/usr/sbin/nologin
www-data:x:33:3:www-data:/var/www:/usr/sbin/nologin
backup:x:34:2:backup:/var/backups:/usr/sbin/nologin
nobody:x:65534:1337:nobody:/nonexistent:/usr/sbin/nologin
syslog:x:101:1000::/home/syslog:/bin/false
whoopsie:x:109:99::/nonexistent:/bin/false
user:x:1000:1000:edco8700,,,,:/home/user:/bin/bash
sshd:x:116:1337::/var/run/sshd:/usr/sbin/nologin
ntp:x:117:99::/home/ntp:/bin/false
mysql:x:118:999:MySQL Server,,,:/nonexistent:/bin/false
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
这是一个 /etc/passwd 文件,我需要对其执行此命令。到目前为止我有:
cut -d: -f1,6 testPasswd.txt | grep ???
这将显示所有用户名和关联的文件夹,但我无法解决如何仅查找以 m、w、s 开头的用户名和打印整行的问题。
我试过 grep -o '^[mws]*'
和它的不同变体,但 none 奏效了。
有什么建议吗?
使用 awk 更容易:
awk 'BEGIN{FS=OFS=":"} ~ /^[mws]/{print , }' testPasswd.txt
sys:/dev
mail:/var/mail
www-data:/var/www
syslog:/home/syslog
whoopsie:/nonexistent
sshd:/var/run/sshd
mysql:/nonexistent
尝试
的变体cut -d: -f1,6 testPasswd.txt | grep '^m\|^w\|^s'
或者更简洁地说,
cut -d: -f1,6 testPasswd.txt | grep '^[mws]'
这更简洁,尤其是当您有很多模式要匹配时。
当然,如果没有约束,awk 解决方案会更好。