shell练习-grep/awk/sed

if && ||

[root@zy ~]# [ -f download ]&& echo exist||echo not exist
exist
[root@zy ~]# [ -f download ]&&echo exist||echo not exist
exist

[root@zy ~]# echo '1'&& echo '2' || echo '3' && echo '4' || echo '5' || echo '6' && echo '7' && echo '8' || echo '9' 
1
2
4
7
8

seq序列

# 打印1-10
[root@zy ~]# seq 1 10
1
2
3
4
5
6
7
8
9
10

# 打印1-10,步长3
[root@zy ~]# seq 1 3 10
1
4
7
10

# 同宽打印
[root@zy ~]# seq -w 1 3 10
01
04
07
10

# 固定宽度打印
[root@zy ~]# seq -f %2g 1 3 10
 1
 4
 7
10

# -f 指定连接符
[root@zy ~]# seq -s "*" -f %2g 1 3 10
 1* 4* 7*10

for|break|continue

# 打印序列
[root@zy ~]# for i in $(seq 1 5); do echo $i; done
1
2
3
4
5

[root@zy ~]# array = (1 2 3 4 5)
[root@zy ~]# for ((i=0;i<${#array[@]};i++))do echo $i;done
0
1
2
3
4

[root@zy ~]# for ((i=0;i<5;i++))do echo $i;done
0
1
2
3
4

[root@zy ~]# for ((i=0;i<8;i++)) do if [ $i -eq 2 ];then continue;elif [ $i -eq 4 ];then echo OK;elif [ $i -eq 6 ];then break;else echo $i;fi;done
0
1
3
OK
5

while

[root@zy ~]# while [ 2 -le 3 ];do echo $i; break ;done
0

# 读取文件a.txt内容并输出
[root@zy ~]# while read x;do echo $x;done  < a.txt
1
2
3
4
5

读取输入

# 键盘输入
[root@zy ~]# read -p 'enter:' a; echo $a
enter:123
123

# 读取文件a.txt内容并输出
[root@zy ~]# while read x;do echo $x;done  < a.txt
1
2
3
4
5

写入文件

# 文件不存在时创建文件并覆盖写入
[root@zy ~]# ls > b.txt 

# 文件不存在时创建文件并追加写入
[root@zy ~]# ls >> b.txt 

文件夹操作

# 打印当前目录所有文件
[root@zy ~]# echo *
a a.txt download nmon_x86_fedora10 nmon_x86_opensuse10 nmon_x86_rhel45

# 当前文件夹下文件遍历
[root@zy ~]# for i in *;do echo $i;done
a
a.txt
download
nmon_x86_fedora10
nmon_x86_opensuse10
nmon_x86_rhel45
nmon_x86_sles10
nmon_x86_sles9
nmon_x86_ubuntu810
Python-3.7.3
Python-3.7.3.tar.xz
Python-3.7.4
Python-3.7.4.tar.xz
tomcat

# 仅打印当前目录下file
[root@zy ~]# for i in *;do if [ -f $i ];then echo $i;else continue;fi;done
a
a.txt
download
nmon_x86_fedora10
nmon_x86_opensuse10
nmon_x86_rhel45
nmon_x86_sles10
nmon_x86_sles9
nmon_x86_ubuntu810
Python-3.7.3.tar.xz
Python-3.7.4.tar.xz

进程

[root@zy ~]# sleep 50
^Z
[1]+  Stopped                 sleep 50

# 查看任务
[root@zy ~]# jobs
[1]+  Stopped                 sleep 50

# 将程序置于后台运行
[root@zy ~]# bg 1
[1]+ sleep 50 &

# 将程序放到前台
[root@zy ~]# fg 1
sleep 50

subshell

# bash命令可创建子shell
[root@zy ~]# echo $$
23194
[root@zy ~]# bash
[root@zy ~]# echo $$
23353

# ()内命令在子shell中运行
[root@zy ~]# a=2
[root@zy ~]# (a=1;echo $a);echo $a
1
2

环境变量

# 查看所有环境变量
[root@zy ~]# env

# 查看PATH
[root@zy ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


# 临时变量,shell关闭后失效
[root@zy ~]# export a=$PATH:/usr/local/
[root@zy ~]# echo $a
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/


# 全局变量
[root@zy ~]# vi /etc/profile
		export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
[root@zy ~]# source /etc/profile   # 立即生效

# 用户变量
vi ~/.bash.profile
		export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
[root@zy ~]# source ~/.bash.profile   # 立即生效

curl

[root@zy ~]# curl  -s http://www.baidu.com/s?wd=mp3 |grep -o "结果约[0-9,]*"|grep -o "[0-9,]*"
2,300,000

[root@zy ~]# curl -s http://www.baidu.com/s?wd=mp3 |grep -o "结果约[0-9,]*"|awk -F "约" '{print $2}' 
2,300,000

[root@zy ~]# curl -s http://www.baidu.com/s?wd=mp3 |grep -o "结果约[0-9,]*"|awk -F "约" '{print $2}' |awk -F "," '{print $0}'
2,300,000


[root@zy ~]# vim baidu.key
mp3
mp4
a
b
[root@zy ~]# while read x;do echo $x;curl -s http://www.baidu.com/s?wd=$x;done <baidu.key |grep -o '结果约[0-9,]*'|grep -o '结果约[0-9,]*'
结果约2,330,000
结果约1,780,000
结果约2,060,000


# 获取网站ip
curl ifconfig.me
curl icanhazip.com
curl curlmyip.com
curl ip.appspot.com
curl ipinfo.io/ip
curl ipecho.net/plain
curl www.trackip.net/i

# 获取响应头
curl -I http://www.baidu.com

grep-文本搜索

[root@zy ~]# grep -i '2' a.txt 
2
[root@zy ~]# cat a.txt |grep -i 2
2


[root@zy ~]# grep -i 'a.' a.txt 
123qweqwaasdqfweasxwefergnidhbiwoerwqweqwe
[root@zy ~]# grep -i 'a.*' a.txt 
123qweqwaasdqfweasxwefergnidhbiwoerwqweqwe
[root@zy ~]# grep -o 'a.' a.txt 
aa
as

awk-文本切割(超强大)

# 字符串分割
[root@zy ~]# echo '123|456|789' |awk -F '|' '{print $0}'
123|456|789

[root@zy ~]# echo '123|456|789' |awk -F '|' '{print $1}'
123

# 不同分隔符拆分--|
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $0}'
123+456-789
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $1}'
123
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $2}'
456
[root@zy ~]# echo '123+456-789' |awk -F '+|-' '{print $3}'
789

BEGIN
[root@zy ~]# echo -e '1|2|3\n4|5|6\n7|8|9' |awk -F '|' 'BEGIN{sum=0}{sum+=$2;print $2}END{print sum}'
2
5
8
15


# 引用外部变量
[root@zy ~]# a=3
[root@zy ~]# b=2
[root@zy ~]# echo `awk "BEGIN{print \"$a\"/\"$b\"}"`
1.5


[root@zy ~]# cat /etc/passwd |awk -F ':' '{print $1}'
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
postfix
chrony
sshd
ntp
tcpdump
nscd
tss
[root@zy ~]# cat /etc/passwd |awk -F ':' 'BEGIN{count=0}{name[count]=$1;count++}END{for(i=1;i<NR;i++) print i,name[i]}'
1 bin
2 daemon
3 adm
4 lp
5 sync
6 shutdown
7 halt
8 mail
9 operator
10 games
11 ftp
12 nobody
13 systemd-network
14 dbus
15 polkitd
16 postfix
17 chrony
18 sshd
19 ntp
20 tcpdump
21 nscd
22 tss



[root@zy ~]# cat a.txt
1  2  3 4
2 2 4  ssa
333
4
5
6
333



## 行匹配 
# 从第二行开始打印
[root@zy ~]# awk 'NR>1' a.txt

# 仅打印第二行
[root@zy ~]# awk 'NR==2' a.txt

# 匹配数值为2的行
[root@zy ~]# awk '$1~/2/' a.txt

# 匹配已4开头的行到以6结尾的行
[root@zy ~]# awk '/4.*/,/6.*/' a.txt

## 列匹配---默认以 -F ‘ ’空格分隔
# 打印第一行
[root@zy ~]# awk 'NR==1 {print $0}' a.txt
1  2  3 4

# 打印第一行第一项
[root@zy ~]# awk 'NR==1 {print $1}' a.txt
1  2  3 4

# 打印第一行最后一项
[root@zy ~]# awk 'NR==1 {print NF}' a.txt
4

# 匹配第一项不为2的行,且进行统计排序
[root@zy ~]# awk '$1!~/2/ {print $1}' a.txt|sort|uniq -c|sort -nr
      2 333
      1 6
      1 5
      1 4
      1 1

sed-文本替换

# 部分替换
[root@zy ~]# echo 'dog fish android ios dog' |sed 's/dog/cat/'
cat fish android ios dog

# 全部替换
[root@zy ~]# echo 'dog fish android ios dog' |sed 's/dog/cat/g'
cat fish android ios cat

# #和/具有同样的作用
[root@zy ~]# echo 'dog fish android ios dog' |sed 's#dog#cat#g'
cat fish android ios cat

# 替换文件--替换原始空间内的内容,文件不改变
[root@zy ~]# cat a.txt 
1
2
3
4
5
6
3
[root@zy ~]# sed 's/3/333/' a.txt 
1
2
333
4
5
6
333
[root@zy ~]# cat a.txt 
1
2
3
4
5
6
3
# 替换原文件--- -i参数
[root@zy ~]# sed -i 's/3/333/g' a.txt 
[root@zy ~]# cat a.txt 
1
2
333
4
5
6
333


# 工业用法
[root@zy ~]# sed -i.bak 's/3/333/' a.txt 
[root@zy ~]# cat a.txt.bak 
1
2
3
4
5
6
3

[root@zy ~]# cat a.txt
1
2
333
4
5
6
333

# 替换'为"
[root@zy ~]# sed  $'s/\'/\"/g' doc.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值