bash Shell 总结《三》

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash Shell 总结《三》相关的知识,希望对你有一定的参考价值。

cat     <-- 显示文件的全部内容,连接多个文件

head    <-- 获取文件头部的内容

tail    <-- 获取文件尾部的内容

grep    <-- 在文件中查找特定的内容

sed     <-- 强大的流编辑器,能做增加、删除、改动等操作

awk     <-- 模式扫瞄和处理工具,是一门语言

cut     <-- 从行中抽取部分内容

wc      <-- 计算数据的字节数,字符数,单词数,行数

sort    <-- 排序工具

uniq    <-- 去除重复工具

tr      <-- 对字符做转换,删除,缩减操作

tac     <-- 把文件中的内容按行号反序打印。

rev     <-- 把文件中的行左右反转




cat, concatinate,把一个或者多个文件的内容按顺序连接起来,输出到标準输出。


cat 12.pub              <-- 显示文件 12.pub 的内容到屏幕上

cat -n 12.pub           <-- 显示文件的内容,并且加上行号

cat -A file             <-- 同时打印出一些不可见的字符和位置标记


# 合并文件

cat 12.pub 13.pub 14.pub 15.pub > /home/czl/.ssh/authorized_keys

cat /etc/* | wc -c




head, 读取文件的头部


head -n 3 /etc/passwd       <-- 读取文件/etc/passwd 的前面三行

head -c 3 /etc/passwd       <-- 读取文件/etc/passwd 的前面三个字节

head -c 10m /dev/zero > f1  <-- 创建一个10M的文件

head -n -1 file             <-- 丟弃 file 的最后一行

head -c -3 file             <-- 丟弃 file 的最后3 个字节




tail, 读取文件的尾部


tail -n 3 /etc/passwd       <-- 读取文件/etc/passwd 的后面三行

tail -c 3 /etc/passwd       <-- 读取文件/etc/passwd 的后面三个字节

tail -n +28 /etc/passwd     <-- 从第28行开始读取,直到文件尾部(丟弃头部的27行)

tail -c +28 /etc/passwd     <-- 从第28字节开始读取,直到文件尾部(丟弃头部的27字节)

tail -f /etc/passwd         <-- 跟踪文件尾部内容的变化,常用来观察日志文件的变化,非常实用




grep, 从文件中抽取符合某种格式的行


常用选项:

-i          <-- 忽略大小写

-l          <-- 输出符合条件的文件名

-n          <-- 显示匹配记录的行号

-c          <-- 输出匹配的记录的总数

-o          <-- 输出匹配的那部分,而不是整行

-w          <-- 匹配单词的边界

-E          <-- 使用扩展的正则表达式

-A          <-- 输出下文(after)

-B          <-- 输出上文(before)

-C          <-- 输出上下文(context)

-R          <-- 递归,用于搜索目录下的文件

-q          <-- 不输出结果,常用于条件测试

-v          <-- 显示不符合条件的结果


操练grep


1. 把/etc/passwd 中包含nobody 的行列出来

2. 把/etc/passwd 中的nobody 列出来

3. 把/etc/passwd 中的nobody 列出来,不区分大小写

4. 用root 身份查找,/etc/sysconfig 目录里面,哪个文件包含了字符串AUTOSWAP

5. 找出/etc/passwd 文件中bash 所在的行的行号

6. 找出/etc/passwd 中有多少个nobody,不区分大小写

7. 找出/etc/passwd 文件中有多少行包含了单词bin

8. 打印出/etc/passwd 文件中包含gdm 的行,同时打出其下面2行

9. 找出/etc/passwd 中不包含bash 的行




sed, 流编辑器,常常用于脚本中


基本格式包含以下部分:

1. 指定范围,不明确指定的话,默认是所有的行,可以是行号,或者正则表达式

2. 指定动作,常用的有d, s, p, i, a

    d: delete, 删除

    s: substitute, 替换

    p: print, 打印

    i: insert, 在前面插入

    a: append, 在后面添加



示范:


删除某些行 (3d)

替换某些字符 (s/abc/ABC/)

删除某些字符(删除就是替换成空, s/abc//)

只输出某些行 (-n 3,10p)

在某行的前面添加一行 (3i)

在某行的后面添加一行 (3a)

通过管道随意插入添加 ( sed -e 1i xxx -e 3i yyy)



关于替换命令的分割符的选择


命令 sed 's/a/A/' 中 sed 执行了替换动作,把第一个小写a 替换成大写A,在这里,分隔符斜杠/ 可以换成任何其它的字符,需要注意的是,如果需要处理的数据中包含了分隔符,就必须对该字符进行转义,举例如下:


把字符串 "/etc/passwd" 中的斜杠替换成下划线,可以有两种做法


1. 斜杠前面必须有一个分斜杠用来转义

[[email protected] ~]$ echo /etc/passwd | sed 's/\//_/g'

_etc_passwd                            ^^


2. 使用別的分隔符,这样就没有必要对斜杠进行转义,命令书写更简洁

[[email protected] ~]$ echo /etc/passwd | sed 's#/#_#g'

_etc_passwd


替换动作的范围

s/a/A/          <-- 替换第一个a

s/a/A/g         <-- 替换所有a

s/a/A/3         <-- 替换第3个a

s/a/A/3g        <-- 替换第3个至最后一个a


sed 的常用选项


-n              <-- 关闭默认的输出动作

-r              <-- 使用扩展的正则表达式,使用这个参数后

                    正则表达式的表示方法会更加方便,推荐使用


下面两条命令是等价的,但是启用了扩展正则表达式的命令更加简单易读

sed '/^.\{5\}ROOT/d' file

sed -r '/^.{5}ROOT/d' file


-i              <-- sed 默认是把修改后的数据输出到标準输出,不会修改原文件

                    加上-i参数后,sed就会直接把修改结果写入原文件,小心!




awk, 比较常用的功能就是按照某个分割符分割一行数据,并输出某些字段(列)


常用的选项:

-F            <--- 字段分割符,可以是一个字符,也可以是多个字符


字段的表示方法:

$0      <--- 整条记录

$1      <--- 第1列(字段)

$2      <--- 第2列(字段)

$n      <--- 第n列(字段)

$NF     <--- 最后一个列


awk 常用的内部变量

FS, Field separator, 字段分割符。字段分割符除了可以通过命令行选项 -F 来指定外,还可以在awk 里面指定


NR, number of records, 到当前行为止,总共处理的行数




cut, 功能类似於awk,但是没有awk那么强大和复杂,当要对数据做分列输出时,经常使用awk,用cut的时候不多。


常用选项

-d          <-- 定义字段的分割符,默认是TAB (delimeter)

-f          <-- 输出指定的字段 (field)

-b          <-- 输出指定位置的字节(byte)

-c          <-- 输出指定位置的字符(character),有別於-b




wc, 计算数据的字节数,字符数,词数,行数


常用选项

-c          <-- 计算字节数

-m          <-- 计算字符数

-w          <-- 计算词数

-l          <-- 计算行数




sort, 按行对文件进行排序


常用选项

-u          <-- 去除重复的行

-n, -h      <-- 按照数值排序

-t          <-- 指定分割符

-k          <-- 指定排序的字段

-r          <-- 反过来排序


把文件按照大小排序:

ls -l | sort -k5,5nr



uniq, 去除连续的重复行


常用选项

-c          <-- 计算重复行的数目




tr, 转换,删除,缩减相同字符


常用选项

-d

-s




tac, 把一个或者多个文件的内容按顺序连接起来,输出到标準输出,每个文件中,内容按行号反序打印。




rev, 把文件中的行左右反转


以上是关于bash Shell 总结《三》的主要内容,如果未能解决你的问题,请参考以下文章

shell基本命令总结

Bash shell 特点总结

shell编程总结

bash Shell 总结

Bash 快捷键总结

bash shell数组使用总结