shell命令精华篇

常用命令实践

[root@b ~]# cat c.txt
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4

[root@b ~]# cat c.txt |sed 's/^/& /'    &作用是代替前面需要替换旧的内容,这里指^。而^有指代以某某开头。
 1.1.1.1
 2.2.2.2
 3.3.3.3
 4.4.4.4

[root@b ~]# cat c.txt |sed 'N;s/ / /'|sed 'N;s/ / /'     N指每次读取2行,然后将换行符替换为空格

1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4

tr -d " "    tr命令的作用——删除换行符,合并多行

[root@b ~]# cat c.txt  | tr -d "                默认删除换行符后,所有字段连在一起

1.1.1.12.2.2.23.3.3.34.4.4.4

[root@b ~]# cat c.txt |sed 's/^/& /' | tr -d " "          利用sed替换命令在每个字段行首添加空格符

 1.1.1.1  2.2.2.2  3.3.3.3  4.4.4.4

sed和tr命令对比:

[root@b ~]# cat c.txt |sed 's/^/& /' | tr -d " " | xargs echo
1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4          #开头无空格
[root@b ~]# cat c.txt |sed 'N;s/ / /'|sed 'N;s/ / /'
1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4          #开头无空格
[root@b ~]# echo " 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4"
1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4          #开头有空格
[root@b ~]# echo " 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4" | xargs echo
1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4          #开头无空格

sort排序命令使用

[root@b ~]# sort -nr -t ":" -k 3 /etc/passwd | head            -n表示以数值型进行排序,-t指定分隔符为冒号,-r表示反向排序,-k指定排序的字段范围,这里是按第三个3字段排序

 

abc:x:1002:1003::/home/abc:/bin/bash
feng:x:1001:1002::/home/feng:/bin/bash
no:x:1000:1001:no:/home/no:/bin/bash
systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
polkitd:x:998:997:User for polkitd:/:/sbin/nologin
saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
unbound:x:996:996:Unbound DNS resolver:/etc/unbound:/sbin/nologin
geoclue:x:995:994:User for geoclue:/var/lib/geoclue:/sbin/nologin
mysql:x:994:1000::/home/mysql:/sbin/nologin

[root@b ~]# find . -maxdepth 1 -name  "*.sh"        #find查找当前目录下一级目录的所有符合条件的文件,-maxdepth 参数用于指定find查找目录的层级深度,默认find查找当前目录及目录下所有子目录内符合条件的文件。
./a.sh

[root@b ~]# tar czf a.tar.gz a.sh             #tar打包文件,多次打包用同一个打包名称时,后面打包内容会覆盖前面打包内容。需要注意!
[root@b ~]# tar czf a.tar.gz c.txt
[root@b ~]# tar czf a.tar.gz a.sh.bak
[root@b ~]# tar -tf a.tar.gz
a.sh.bak

[root@b ~]# i=1                  #$((i++)) 与$i区别,需要注意。i++等价于i=$i+1的意思。
[root@b ~]# echo $((i++))
1
[root@b ~]# echo $i
2
[root@b ~]# echo $((i++))
2
[root@b ~]# echo $i
3
[root@b ~]# echo $((i++))
3
[root@b ~]# echo $i
4

while read 用法,表示逐行去读取某个文件

[root@b ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@b ~]# while read line;do echo $line;done </etc/hosts          # </etc/hosts代表read文件内容的来源  
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

select选择菜单,PS3为固定语句格式。

[root@b linshi]# cat b.sh
#!/bin/bash

PS3="what system do you like?"

select i in CentOS Ubuntu Redhat

do
echo "you like system is:" $i

done
[root@b linshi]# sh b.sh
1) CentOS
2) Ubuntu
3) Redhat
what system do you like?1
you like system is: CentOS
what system do you like?2
you like system is: Ubuntu
what system do you like?3
you like system is: Redhat
what system do you like?^C

原文地址:https://www.cnblogs.com/xiaofeng666/p/10916592.html