10+从业经验,3CCIE、HCIE、红帽RHCA、VCP。获取Linux资料,可+v:glab-mary
分类: LINUX
2025-01-02 12:01:11
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
grep --color=auto passwd #高亮显示过滤内容 alias grep='grep --color=auto' #别名 alias grep='grep --color=auto' >> /etc/bashrc #写入配置文件,使其一直生效 source /etc/bashrc #读取配置文件 grep 'a*' passwd vim passwd cat passwd | grep 'bash$' #寻找以bash结尾的行 cat passwd | grep -ni 'bash$' #寻找不区分大小写以bash结尾的行,同时打印行号 cat passwd | grep -niv 'bash$' #反选不区分大小写以bash结尾的行,同时打印行号 grep -nB 2 'ftp' passwd #打印以ftp过滤的行及其前两行,同时打印行号 grep -nB 2 '^ftp' passwd #打印以ftp开头过滤的行及其前两行,同时打印行号 grep -nA 2 '^ftp' passwd #打印以ftp过滤的行及其前两行,同时打印行号 grep -nB5 2 '^ftp' passwd #打印以ftp过滤的行及其前两行,同时打印行号 grep -A 2 '^ftp' passwd #打印以ftp过滤的行及其后两行 grep -C 2 '^ftp' passwd ##打印以ftp过滤的行及其前后两行 grep -o '^ftp' passwd #只打印ftp关键字
[root@ecs-shell ~]# cat passwd #源文件内容 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/ROOT:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin [root@ecs-shell ~]# cat passwd | cut -d":" -f1 #获取{BANNED}中国第一列全部的username root bin daemon adm lp sync shutdown halt mail operator games ftp nobody systemd-network dbus polkitd postfix sshd chrony tcpdump tss [root@ecs-shell ~]# cat passwd | awk -F":" '{print $1}' #awk也可以做到 root bin daemon adm lp sync shutdown halt mail operator games ftp nobody systemd-network dbus polkitd postfix sshd chrony tcpdump tss [root@ecs-shell ~]# cat passwd | cut -d":" -f1,7 #打印{BANNED}中国第一列和第七列 root:/bin/bash bin:/sbin/nologin daemon:/sbin/nologin adm:/sbin/nologin lp:/sbin/nologin sync:/bin/sync shutdown:/sbin/shutdown halt:/sbin/halt mail:/sbin/nologin operator:/sbin/nologin games:/sbin/nologin ftp:/sbin/nologin nobody:/sbin/nologin systemd-network:/sbin/nologin dbus:/sbin/nologin polkitd:/sbin/nologin postfix:/sbin/nologin sshd:/sbin/nologin chrony:/sbin/nologin tcpdump:/sbin/nologin tss:/sbin/nologin [root@ecs-shell ~]# cat passwd | awk -F":" '{print $1,$NF}' #awk打印{BANNED}中国第一列和第七列 root /bin/bash bin /sbin/nologin daemon /sbin/nologin adm /sbin/nologin lp /sbin/nologin sync /bin/sync shutdown /sbin/shutdown halt /sbin/halt mail /sbin/nologin operator /sbin/nologin games /sbin/nologin ftp /sbin/nologin nobody /sbin/nologin systemd-network /sbin/nologin dbus /sbin/nologin polkitd /sbin/nologin postfix /sbin/nologin sshd /sbin/nologin chrony /sbin/nologin tcpdump /sbin/nologin tss /sbin/nologin [root@ecs-shell ~]# cat passwd | cut -c 1-5 #获取每行的第1-5个字符 root: bin:x daemo adm:x lp:x: sync: shutd halt: mail: opera games ftp:x nobod syste dbus: polki postf sshd: chron tcpdu tss:x [root@ecs-shell ~]# cat passwd | cut -c 10- #获取每行的第10个字符到每行结束 0:root:/root:/bin/bash :bin:/bin:/sbin/nologin 2:2:daemon:/sbin:/sbin/nologin :adm:/var/adm:/sbin/nologin lp:/var/spool/lpd:/sbin/nologin 0:sync:/sbin:/bin/sync x:6:0:shutdown:/sbin:/sbin/shutdown 0:halt:/sbin:/sbin/halt 12:mail:/var/spool/mail:/sbin/nologin x:11:0:operator:/ROOT:/sbin/nologin 2:100:games:/usr/games:/sbin/nologin 50:FTP User:/var/ftp:/sbin/nologin 99:99:Nobody:/:/sbin/nologin etwork:x:192:192:systemd Network Management:/:/sbin/nologin :81:System message bus:/:/sbin/nologin :999:998:User for polkitd:/:/sbin/nologin :89:89::/var/spool/postfix:/sbin/nologin :74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 998:996::/var/lib/chrony:/sbin/nologin :72:72::/:/sbin/nologin 59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin #相关命令: cat passwd | awk -F":" '{print $1}' cat passwd | cut -d":" -f1,7 cat passwd | awk -F":" '{print $1,$NF}' cat passwd | cut -c 1-5 cat passwd | cut -c 10-
[root@ecs-shell ~]# cat passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/ROOT:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin [root@ecs-shell ~]# cat passwd | sort -n -t":" -k3 #查看以":"分割的,第三列从小向大排序的内容 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/ROOT:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin [root@ecs-shell ~]# cat passwd | sort -nr -t":" -k3 #查看以":"分割的,第三列从大向小排序的内容 polkitd:x:999:998:User for polkitd:/:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin operator:x:11:0:operator:/ROOT:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown sync:x:5:0:sync:/sbin:/bin/sync lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin root:x:0:0:root:/root:/bin/bash [root@ecs-shell ~]# cat 3.txt aaa 111 222 111 222 222 sda dsdsa vvv [root@ecs-shell ~]# cat 3.txt | sort -u #去掉重复出现的行 111 222 aaa dsdsa sda vvv #相关命令 cat passwd cat passwd | sort -n -t":" -k3 cat passwd | sort -nr -t":" -k3
[root@ecs-shell ~]# cat 3.txt #查看源文件 aaa 111 222 111 222 222 sda dsdsa vvv [root@ecs-shell ~]# cat 3.txt | uniq #对源文件中连续重复的行去重 aaa 111 222 111 222 sda dsdsa vvv [root@ecs-shell ~]# cat 3.txt | uniq -c #对重复的行计数 1 aaa 1 111 1 222 1 111 2 222 1 sda 1 dsdsa 1 vvv 1 [root@ecs-shell ~]# cat 3.txt | uniq -d #打印出其中连续重复的行 222 #相关命令 cat 3.txt | uniq cat 3.txt | uniq -c cat 3.txt | uniq -d
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
[root@ecs-shell ~]# echo "helloworld" | tee abc.txt #标准覆盖输到我们的文件和屏幕上 helloworld [root@ecs-shell ~]# echo "helloworld" | tee -a abc.txt #标准追加输出到我们的文件和屏幕上 helloworld [root@ecs-shell ~]# cat abc.txt helloworld helloworld [root@ecs-shell ~]# cat vsftpd.conf | grep -v "^#" | grep -v "^$" | tee 4.txt anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES echo "helloworld" | tee 1.txt cat 1.txt echo "abc" | tee 1.txt cat 1.txt cat vsftpd.conf | grep -v "^#" | grep -v "^$" | tee 4.txt
diff 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。
[root@ecs-shell ~]# diff 1.txt 2.txt #拿到的是一个操作信息,可以使{BANNED}中国第一个文件变为第二个文件。 3c3 #3c3是指{BANNED}中国第一个文件第三行通过改变可以变成第二个文件第三行 < write_enable=YES #{BANNED}中国第一个文件第三行 --- > write_enable=NO #第二个文件第三行 8,9c8 #8,9c8是指{BANNED}中国第一个文件通过改变第八,九行可以变成第八行 < ooooooo < xferlog_std_format=YES --- > xferlog_std_format=NO 10a10 #10a10指第十行增加第二个文件第十行的内容 > aaa #第二个文件第十行内容 12c12,13 #同上 < pam_service_name=vsftpd --- > bb > ccpam_service_name=vsftpd [root@ecs-shell ~]# cat 1.txt anonymous_enable=YES local_enable=YES local_umask=022 cccca dirmessage_enable=YES connect_from_port_20=YES xferlog_std_format=NO listen=NO oooooooop listen_ipv6=YES ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@ecs-shell ~]# cat 2.txt anonymous_enable=YES local_enable=YES write_enable=NO local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=NO listen=NO aaa listen_ipv6=YES bb ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES #对两个文件进行一定修改后,使用-c模式来比较 [root@ecs-shell ~]# diff -c 1.txt 2.txt *** 1.txt 2023-12-06 10:56:46.672339322 +0800 #修改时间 --- 2.txt 2023-12-04 22:54:27.956996693 +0800 #修改时间 *************** *** 1,13 **** #{BANNED}中国第一个文件的行数 anonymous_enable=YES local_enable=YES local_umask=022 - cccca #{BANNED}中国第一个文件删除此行 dirmessage_enable=YES connect_from_port_20=YES xferlog_std_format=NO listen=NO ! oooooooop #将此行改为“ aaa ” listen_ipv6=YES ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES --- 1,15 ---- #第二个文件的行数 anonymous_enable=YES local_enable=YES + write_enable=NO #{BANNED}中国第一个文件加上此行 local_umask=022 dirmessage_enable=YES + xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=NO listen=NO ! aaa listen_ipv6=YES + bb #{BANNED}中国第一个文件加上此行 ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES #使用-u来比较 [root@ecs-shell ~]# diff -u 1.txt 2.txt --- 1.txt 2023-12-06 10:56:46.672339322 +0800 +++ 2.txt 2023-12-04 22:54:27.956996693 +0800 @@ -1,13 +1,15 @@ anonymous_enable=YES local_enable=YES +write_enable=NO #加上此行 local_umask=022 -cccca #删除此行 dirmessage_enable=YES +xferlog_enable=YES #加上此行 connect_from_port_20=YES xferlog_std_format=NO listen=NO -oooooooop #删除此行 +aaa #加此行 listen_ipv6=YES +bb #加此行 ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES #我们也可以基于diff对两个文件夹进行比较: [root@ecs-shell ~]# ll test1 total 0 -rw-r--r-- 1 root root 0 Dec 6 11:05 file1 -rw-r--r-- 1 root root 0 Dec 6 11:05 file2 -rw-r--r-- 1 root root 0 Dec 6 11:05 file3 -rw-r--r-- 1 root root 0 Dec 6 11:05 file4 -rw-r--r-- 1 root root 0 Dec 6 11:05 file5 [root@ecs-shell ~]# ll test2 total 0 -rw-r--r-- 1 root root 0 Dec 6 11:05 file1 -rw-r--r-- 1 root root 0 Dec 6 11:05 file2 -rw-r--r-- 1 root root 0 Dec 6 11:05 file3 -rw-r--r-- 1 root root 0 Dec 6 11:05 test1 -rw-r--r-- 1 root root 0 Dec 6 11:05 test2 -rw-r--r-- 1 root root 0 Dec 6 11:05 test3 [root@ecs-shell ~]# diff test1 test2 Only in test1: file4 Only in test1: file5 Only in test2: test1 Only in test2: test2 Only in test2: test3 #diff还可以搭配patch补丁工具使用:可以直接使文件1变为文件二 [root@ecs-shell ~]# diff 1.txt 2.txt > file.patch [root@ecs-shell ~]# patch 1.txt file.patch patching file 1.txt [root@ecs-shell ~]# diff 1.txt 2.txt [root@ecs-shell ~]# cat 1.txt anonymous_enable=YES local_enable=YES write_enable=NO local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=NO listen=NO aaa listen_ipv6=YES bb ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@ecs-shell ~]# cat 2.txt anonymous_enable=YES local_enable=YES write_enable=NO local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=NO listen=NO aaa listen_ipv6=YES bb ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
paste 指令会把每个文件以列对列的方式,一列列地加以合并。
[root@ecs-shell ~]# cat 4.txt anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES [root@ecs-shell ~]# paste 3.txt 4.txt aaa anonymous_enable=YES 111 local_enable=YES 222 write_enable=YES 111 local_umask=022 222 dirmessage_enable=YES 222 xferlog_enable=YES sda connect_from_port_20=YES dsdsa xferlog_std_format=YES vvv listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES #-s选项 把每个文件当一行输出 [root@ecs-shell ~]# paste -s 3.txt 4.txt aaa 111 222 111 222 222 sda dsdsa vvv anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES #-d选项可以定义之间的分隔符 #定义|为分隔符 [root@ecs-shell ~]# paste -d"|" 3.txt 4.txt aaa|anonymous_enable=YES 111|local_enable=YES 222|write_enable=YES 111|local_umask=022 222|dirmessage_enable=YES 222|xferlog_enable=YES sda|connect_from_port_20=YES dsdsa|xferlog_std_format=YES vvv|listen=NO |listen_ipv6=YES |pam_service_name=vsftpd |userlist_enable=YES |tcp_wrappers=YES #定义":"为分隔符 [root@ecs-shell ~]# paste -d":" 3.txt 4.txt aaa:anonymous_enable=YES 111:local_enable=YES 222:write_enable=YES 111:local_umask=022 222:dirmessage_enable=YES 222:xferlog_enable=YES sda:connect_from_port_20=YES dsdsa:xferlog_std_format=YES vvv:listen=NO :listen_ipv6=YES :pam_service_name=vsftpd :userlist_enable=YES :tcp_wrappers=YES
tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
[root@ecs-shell ~]# cat 1.txt anonymous_enable=YES local_enable=YES write_enable=NO local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=NO listen=NO aaa listen_ipv6=YES bb ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES #使用NO去替换YES [root@ecs-shell ~]# cat 1.txt | tr "YES" "NO" anonymous_enable=NOO local_enable=NOO write_enable=NO local_umask=022 dirmessage_enable=NOO xferlog_enable=NOO connect_from_port_20=NOO xferlog_std_format=NO listen=NO aaa listen_ipv6=NOO bb ccpam_service_name=vsftpd userlist_enable=NOO tcp_wrappers=NOO #使用“NO ”去替换yes [root@ecs-shell ~]# cat 1.txt | tr "YES" "NO " anonymous_enable=NO local_enable=NO write_enable=NO local_umask=022 dirmessage_enable=NO xferlog_enable=NO connect_from_port_20=NO xferlog_std_format=NO listen=NO aaa listen_ipv6=NO bb ccpam_service_name=vsftpd userlist_enable=NO tcp_wrappers=NO #将所有小写字母换成大写 [root@ecs-shell ~]# cat 1.txt | tr "[a-z]" "[A-Z]" ANONYMOUS_ENABLE=YES LOCAL_ENABLE=YES WRITE_ENABLE=NO LOCAL_UMASK=022 DIRMESSAGE_ENABLE=YES XFERLOG_ENABLE=YES CONNECT_FROM_PORT_20=YES XFERLOG_STD_FORMAT=NO LISTEN=NO AAA LISTEN_IPV6=YES BB CCPAM_SERVICE_NAME=VSFTPD USERLIST_ENABLE=YES TCP_WRAPPERS=YES #要实现如上的效果,也可以这样写 [root@ecs-shell ~]# tr "[a-z]" "[A-Z]"< 1.txt ANONYMOUS_ENABLE=YES LOCAL_ENABLE=YES WRITE_ENABLE=NO LOCAL_UMASK=022 DIRMESSAGE_ENABLE=YES XFERLOG_ENABLE=YES CONNECT_FROM_PORT_20=YES XFERLOG_STD_FORMAT=NO LISTEN=NO AAA LISTEN_IPV6=YES BB CCPAM_SERVICE_NAME=VSFTPD USERLIST_ENABLE=YES TCP_WRAPPERS=YES #将数字换为“@” [root@ecs-shell ~]# tr '0-9' '@' <1.txt anonymous_enable=YES local_enable=YES write_enable=NO local_umask=@@@ dirmessage_enable=YES xferlog_enable=YES connect_from_port_@@=YES xferlog_std_format=NO listen=NO aaa listen_ipv@=YES bb ccpam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES tr -d 是直接删除掉匹配到的字符 #删除所有小写字母 [root@ecs-shell ~]# cat passwd | tr -d "a-z" ::0:0::/:// ::1:1::/:// ::2:2::/:// ::3:4:://:// ::4:7::///:// ::5:0::/:// ::6:0::/:// ::7:0::/:// ::8:12::///:// ::11:0::/ROOT:// ::12:100:://:// ::14:50:FTP U://:// ::99:99:N:/:// -::192:192: N M:/:// ::81:81:S :/:// ::999:998:U :/:// ::89:89::///:// ::74:74:P- SSH:///:// ::998:996::///:// ::72:72::/:// ::59:59:A ://:// #删除所有大写字母 [root@ecs-shell ~]# cat passwd | tr -d "A-Z" root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50: ser:/var/ftp:/sbin/nologin nobody:x:99:99:obody:/:/sbin/nologin systemd-network:x:192:192:systemd etwork anagement:/:/sbin/nologin dbus:x:81:81:ystem message bus:/:/sbin/nologin polkitd:x:999:998:ser for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:rivilege-separated :/var/empty/sshd:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin tss:x:59:59:ccount used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin #删除所有字母和数字 [root@ecs-shell ~]# cat passwd | tr -d "A-Za-z1-9" ::0:0::/:// :::::/:// :::::/:// ::::://:// :::::///:// :::0::/:// :::0::/:// :::0::/:// :::::///:// :::0::/:// :::00:://:// :::0: ://:// :::::/:// -:::: :/:// :::: :/:// :::: :/:// :::::///:// ::::- :///:// :::::///:// :::::/:// :::: ://:// #缩减连续重复的字符 [root@ecs-shell ~]# tr -s "a-z" < passwd rot:x:0:0:rot:/rot:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spol/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spol/mail:/sbin/nologin operator:x:11:0:operator:/ROOT:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System mesage bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin postfix:x:89:89::/var/spol/postfix:/sbin/nologin shd:x:74:74:Privilege-separated SSH:/var/empty/shd:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin ts:x:59:59:Acount used by the trousers package to sandbox the tcsd daemon:/dev/nul:/sbin/nologin ifconfig mkdir test touch file touch file{0..9} touch file1{0-4} touch file1{0-4}.jpg ll cp file* test/ ll test/ ls rm file* rm -r file* yy y cd test/ ls rm file1{0-4} rm file1{0-4}.jpg ls touch file1{0..4}.jpg ls file[123] ls file[123].jpg ls file[0-9] ls file* ls file[1-19] touch file- ls file[1-19] ls file[2-19] ls file[2-29] ls -l file[!0-9] ls -l file[!0-2] ls -l file[!0-3] ls -l file[!0-4] ls -l file[!0-5] ls -l file[!0-6] ll file{1,2,3,-,14} ll file{1,2,3,-,13} ll ll file{1..13}.jpg ll file{1..13}.* ll file{1..13}* date +%F echo "$date" echo "$(date)" echo "$(date +%F)" echo "$(date +%Y:%m:%d)" echo `$(date +%Y)` echo `$date +%Y` echo `$date +%F` echo `date +%F` echo "$(date +%F)" cat /etc/shell cat /etc/shells ll /bin/bash ll /bin/sh /bin/dash /bin/sh ls cd .. mkdir shell cd shell/ vim 1.sh sh 1.sh vim 1.sh bash -x 1.sh bash -n 1.sh source 1.sh ll man rename cd ls cd test/ ls rename file1{1..4}.jpg test{1..4}.jpg ls rename file1{1..4}.jpg test{1..4}.jpg file1*.jpg ls rename file1 test1 file1?.jpg ls history /bin/bsh /bin/bash ps echo $A env ps /bin/bsh /bin/bash ls ps cd ../shell/ A=hello echo $A export $A export A env | grep A ls history " '{print $NF}'