linux中bash命令的作用是,Shell(5)-linux系统bash用法

本篇博客将介绍linux系统中比较常用的 bash 以及用法,例如被称为Linux系统中的"三剑客"--grep , sed , awk ; 还有cut ,seq , sort , wc , uniq , diff ,通配符等 .

在Linux系统中查找文件一般都会用到通配符 , 管道  , bash技巧命令来输出我们想要得到的结果 , 首先我们先了解通配符的作用:

一 . 通配符

作用 : 是用来在文件搜索时代替文件名中的一个或多个正真字符 .

常用通配符符号有 : ?  *  []

?  作用 : 匹配任意单个字符 .

例 : ls  /dev/tty?  , 输出的结果为 /dev/tty 加任意一个字符 , 如图 :

487ddf188b3b2634c058dba0402d06a8.png

再尝试使用命令 ls /dev/tty?? , 结果为 :

58b5f0034a99a667b7a94d439b665434.png

*  作用 : 匹配任意0个或多个字符 , 意为所有

例 : ls  /dev/tty*

ce8480d7f18ba24d54388f64f25fe58b.png

同理 , ls  /etc/*.conf , 输出的结果为显示目录 /etc 下的所有以conf结尾的文件 , 这里不做尝试 .

[] 作用 : 匹配[]中的任意单个字符

例 : ls  /dev/tty[123]5

30cf98b2e30d256292247db8457f5064.png

也可以连续一个范围进行匹配 , 如 ls  /dev/tty[1-6]5

6f028709422c978e3fe996adc90f16f0.png

管道符|  :将前一个命令的结果(标准输出) 传给后一个命令继续处理

例 : head -6  /etc/passwd  |  cat  -n    #查看文件/etc/passswd的前6行 后, 再用cat查看显示行号

d3788036c91167520dc556b779d8e4ff.png

说明 : 管道符可以一个接着一个 , 例在上面的例子上再输出前3行信息

64d2b3433d7a0510f26cfce4e388626d.png

二 . Linux系统三剑客其二(grep , sed )入门

awk用法见博客 :https://blog.51cto.com/14181896/2359808

1 . grep : 匹配关键字 , 显示文件中关键字所在的整行内容

例 : grep  root  /etc/passwd         #显示/etc/passwd文件中所包含root关键字的行

e0f34ffca52d5742ca566247d6cf8a47.png

常用选项 :  -n         显示行号

-i         不区分大小写

-v      取反

-c         带关键字的函数

-n         静默执行 , 不在屏幕显示匹配到的内容 , 通常用于shell脚本

更多选项用法可以用 grep  --help 查看用法

2 . sed流编辑器

是一种文本编辑器 , 默认情况下是不会修改原文件的 , 也是一种非交互式的编辑器

工作原理 : 一行一行处理文件 , 当从文件中读取一行后 , 首先放到模式空间(内存缓冲区)匹配关键字进行相应的处理 , 处理完将结果输出到屏幕上 , 接着处理下一行内容 , 直到所有行都读取完毕 , sed 结束 .

sed的语法 :   sed  [option] '地址命令'  文件名

常用选项 :  -n  静默输出 , 关闭模式空间的输出 , 不会输出未匹配到的行

-e   允许进行多项编辑 , 应用于对同一行做多次处理 , -e  "命令1"  -e  "命令2" ..-e "命令n"

-f  后接sed脚本 , 指定执行的sed脚本

-r   允许使用扩展正则

-i   直接作用于原文件

sed 地址定址 :

定址用于决定对哪些行进行编辑 , 地址形式可以是数字 , 正则表达式或二者结合 . 如果没有指定地址 , sed将处理输入文件中的所有行 .

例 : 文件准备 , 将/etc/passwd文件中的前10行内容添加行号覆盖写入/pass文件中 , 然后查看/pass文件中的内容

acf0afd39bb15cdfe3b048ff3e4e06ab.png

输出单行 :

sed  -n  '1p'  /pass     #显示/pass文件中的第一行 ,1p 指print 第1行

f7124cac35df9a91b87791fe20a2746e.png

同理 , 输出/pass文件第5行 :

cf642955218e92f4c81505c21207d2f4.png

输出指定的多行 :

f5ae6677cb5c61d339676d7133373635.png

指定行数 , 行数号与行数号之间用逗号隔开

打印从i行开始的后几行 (i,+n)

845d02339dc24f5c2b805b5c166dbf95.png

打印从第1行开始 , 再加上n行为止

2ee1618542cdd9f2ac0a795c70321469.png

关键字匹配: 处理符合模式(匹配关键字)的行 , -r 表示启用正则表达式

例 : 显示/etc/passwd文件中以root开头的内容

35cc368fec005121a5ed3ae0be749b8e.png

sed的子命令 :

sed的子命令告诉sed对指定行进行何种操作 , 包括打印p , 删除d , 修改(追加a , 插入i , 替换s , 字符替换c)

将/etc/passwd这个文件前10行导入新文件/pass1:   head  /etc/passwd  >  /pass1

d : 删除(delete)

sed  '/^root/d'  /pass1     处理/pass1文件显示删除以root开头的行号

1424ed6740aae66199ac7c2ed31072a8.png

i : (i\text) 在符合模式的行的上面插入(insert)\以后的text文本 , 结果将在终端上显示 , 默认不会改变原文件

sed '/^root/i\hello'  /pass1

7cc37a137852487070ac2e8a609e8ed8.png

a : (a\text) 在符合模式的行的下面追加\以后的text文本 , 处理结果同 i

32fffd7fa6ccac07c900aacea5af744b.png

结合上面两个例子 , 使用 -e 选项 同时执行 , 结果如图所示 :

4f5af383760bac448cdc485152b4949f.png

c : (c\text) 用新文本覆盖符合模式的行中的文本

例 : 用 hello world 覆盖/pass1文件中的第 2 行

d5ce57369d01122f5aa6b82d2e31a14d.png

s : 用一个字符替换另一个字符

例 : sed  's/root/ROOT/g'  /pass1    #指定替换所有匹配到的

3b0dd30cece65637306fd5929dfab9c7.png

sed  's/root/ROOT/2'  /pass1    #指定替换匹配到的的第二个

eaeab01f1074c98b42759c789657db1d.png

cut命令 : 提取文件中指定的字段 , 字符内容 . 默认分隔符为空格

格式 :  cut  [选项]..  [文件]..

常用选项 : -b   按照字节切 , utf-8编码中每个汉字占三个字节(好比4个汉字就取得12个字节)

-c    按照字符切

-d    指定分隔符

-f   指定以分隔符分割的哪个字段

实例 :  将 /etc/passwd 文件中的前5行覆盖写入/pass 文件中( head  -5  /etc/passwd  > /pass)

显示/pass文件中以 : 分隔的第6行内容 , 家目录内容:

43c0f8081fc686f7b8e6556b06536656.png

显示/pass文件中的第一列(用户名)和第7列(shell解释器)的内容:

2fe30ffefdc6de9bf1f9f133ceb3af91.png

同理 : cut  -d :  -f  1-3  /pass    取1~3列内容

以字符大小切 , 例 :echo '×××' | cut  -b  1-12

51db8d8da5107b2d0e4237e2994150a5.png

seq : 按顺序打印出一些数字 , 例如: 1 2 3 4 5 ...

用法 :  seq  [选项]  ...尾数

seq  [选项]  ... 首数  尾数

seq  [选项]  ...首数  增量  尾数

实例 :  seq  5       #按顺序输出1~5的数

0deef964415f772fc19351f809533d10.png

同理 : seq  5~10     #按顺序输出5~10的数

seq  1  2  10    #输出1~10之间的奇数

seq  10  -1  0    #输入10~0之间的数

补齐输出 : -w   例 : seq  -w  1  50  200

1e2eddb9a882ce2576e3b07c29fdbdab.png

扩 : 使用echo命令也能实现seq同样的效果 , 格式 echo {首数..尾数..增量}

sort排序 : 排序分为升序 和 降序 , 默认是按升序进行排列

常见选项 : -n(--numeric--sort)   根据数值比较 , 默认是按单个字符来比较

-r   逆序输出排序结果

-t   指定分割符

-k   排序键(key , 即排序的列字段)

-u   去掉重复行

实例 : seq 1 10 | sort

53aa438880bc1a869f2b03d2cb1712c9.png

seq  1  10 | sort -n

0721f518a5f5a8c550773370d51b1db7.png

seq  1  10 | sort - nr

691107d8f44004dd65f434fadadcfa19.png

sort  -t :  -k  2  -n  文件名    #按 : 分割开的以第2列是数值大小排序 (使用的最多)

例 : 按/etc/passwd 文件中第3列uid数值大小进行排列

17fea04da2557906e10881f733479b8f.png

wc : 统计行数 , 单词数 , 字节数

例 : wc  /etc/passwd    #在/etc/passwd这个文件中有45行 , 92个单词数 , 2356个字节

1d8732eb263712f28074657189ad3c64.png

wc  -l    统计行数

55d1f3000314ef49ee0f3312a2a1870d.png

wc  -c  统计字节数

0c9da2628824c8e703b20860d94da7c6.png

wc  -m  统计单词数

0233e759928ac7a939035e91cc029bd7.png

统计 /bin 目录下有多少个命令

0648fad70d5c6d30dbd06ebefd70d09d.png

uniq : 合并连续重复的行

常用选项 :  -u   只显示没有连续重复的行

-c   统计连续重复行的次数

-d    只显示连续重复行一次 , 哪一行连续重复了就显示哪行

-i    忽略大小写

例 : 准备一个文件 a.txt , 在文件输入内容并查看a.txt如图所示 :

150d01c6d1876337c2662c94d1d1aa9b.png

uniq  -c  a.txt     #统计连续出现的次数

6ef06bced21e3f2907401ae705a458e6.png

uniq  a.txt    #对a.txt 文件中连续重复的行只显示一次

f0bc0b6b57dbfbe69f65c0fa586fd516.png

uniq  -u  a.txt      #不显示连续重复的行

6b855ef56d39ebd9123884a17ebf0886.png

uniq  -d  a.txt    #仅显示连续出现的内容一次

36aa15ad2e4da9f9e27ad7b164d11000.png

结合sort排序使用 , 显示没有重复的行

d5c6122b7fe79d6ea26ee5d42c82391e.png

diff 命令 :

vimdiff  : 比较两个文件的差异

实例 : 准备两个存在差异的文件 :

head  -3  /etc/passwd  >  /tmp/pass3

head  -5  /etc/passswd > /tmp/pass5

准备好上面两个文件之后 ,先使用vimdiff 对比/pass3 和 /pass5的文件内容 , 再用diff命令对比两个文件的差异 , 将显示出两个文件不同内容:

51f8411c3b7d45898e489f53e7f974a4.png

265d75ac4cac238a27fe2a35d461e3f7.png

通过显示差异 , 可以制作补丁 :

diff  /pass3  /pass5  >  /pass35.patch   #制作补丁文件/pass35.patch(增加内容) 并查看此文件 :

diff  /pass5  /pass3  >  /pass53.pattch   #制作补丁文件/pass53.patch(减少内容)

45ee2934095f9c1bfcf44b8bf6c66041.png

patch 打补丁 :

首先安装patch -- yum  install  -y  patch ,然后给/pass3 文件打补丁 , 最后查看/pass3文件内容 :

f74685121bd820645aceead695ac23e9.png

同理 patch  /pass3  /pass53.patch  会减少/pass3的最后两行

tr : 替换字符 , 被替换的字符与替换的字符数必须是相等的

用法 : tr   旧字符   新字符

实例 : 准备一个文件 b.txt , 内容如图 :

59ff681fcb14959932ced7d5f0d41959.png

cat  b.txt | tr  20  89     #将cat  b.txt 结果中的20 替换成了 89(不改变原文件)

14633a89edf88ad05ccee868b23639ec.png

cat  a.txt | tr  "a-z" "A-Z"   #替换时一一替换 , 字母变成大写

bee22ac1d1a05a536c276c5b1a6b9e10.png

以上都是比较常见的 bash 和 它们的用法 , 下一篇再介绍 awk 的简介作用以及它的入门操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值