cut\grep\awk\sort\sed\head\tail\cat\paste\wc\uniq\diff\patch\tr
第一、扣取列
1.#cut -d: -f 1,3,4 file
选项:-d 定义分隔符
-f 指定扣取的列的位置
#cut -c0-6 file
选项:-c 定义扣取从开头算起的6个字符
第二、截取行
2.#grep -i -v "^system" file
选项: -i 表示忽略大小写
-v 表示不包括
-n 表示显示结果所在行号
-E 表示支持扩展的正则表达式
^ 表示以“system”开头
$ 表示以“关键字”结尾
^$ 表示空行
. 表示一个任意字符
* 表示前一个字符重复任意次
[] 匹配可能得字符
#grep -Ev '^#|^$' /etc/postfix/main.cf
关键字:以 #开始或(|)空行--------其中 “|” 需要-E 参数的支持
#grep -E [0-9]abc$ :关键字表示--以"abc"结尾且之前有一个数字
[0-9]\{11} :关键字表示--11位数字
[0-9]{1,3} : 关键字表示--1-3位数字
#egrep 是扩展功能的grep
例: egrep '2|5' 1.txt 列出还有2或5的行
egrep '33(2|5)' 1.txt 列出包含33,而且后边跟的是2或者5的行
#grep 进阶
grep -h select * 列出当前目录下所有包含select关键字的行
grep -l select * 列出当前目录下所有包含select关键字的文件名
-----------------------------正则表达式
第三、文件内容提取
3.#awk -F --------用于文件内容分段提取
如:显示系统中UID=0的用户名
#awk -F :'$3==0{print $1}'/etc/passwd
如显示系统中密码为空的用户名
#awk -F : 'length($2)==0 {print $1}' /etc/shadow
#awk '{print $9}'
当没有指定分隔符时,默认以空格分隔,且多个连续空格会认为是一个空格。
查看/etc 目录中属主是 root 的文件名称
# ll /etc | awk '{if ($3=="root") print $9}'
awk引用变量
# awk '$1== " '$a ' " {print $0} ' file.txt
##########################################
-----需要注意:当用if判断时 条件在{}中
当不用if判断是 条件在‘’内,{}外
################################################
条件表达:
awk -F: '{ if ($3>499) print $1}' /etc/passwd
awk -F: '{ if ($3==500) print $1}' /etc/passwd
awk -F: '{ if (length($2)==0) print $1 }' /etc/passwd
awk -F: '{ if ($1=="'$a'") print $1}' /etc/passwd
例:扣取文件名
[root@localhost /]# ll | awk '{print $9}'
----注意:wak中的判断 “==” 等于 ; “=”赋值
----awk 引用变量(使用选项 -v)
例:
# awk '$1== " '$a ' " {print $0} ' file.txt
#!/bin/bash
read -p "please input the UID :" uid
awk -F : -v ID=$uid ' $3==ID {print $1}' /etc/passwd
第四、排序
4.#sort -t : -k 3 -nruf file
选项:-t 定义分隔符
-k 指定比较的列的位置
-n 以数值的方式比较 例3 和14 比较:如果有-n 则14>3 ,如果没有-n,则以字符方式比较3>1‘4’(比较首字母)
-r 反向排序 默认是升序,即由小到大
-u 删除重复行 --uniq
-f 排序时忽略大小写
第五、统计
5.#wc -l -w file
选项:-l 统计行数
-w 统计单词数
第六、比较
6.#diff file1 file2 > patch.txt 生成补丁文件
#patch file1(旧文件) < patch.txt 为老版本文件打补丁
第七、字符替换
7.#tr “原有字符” “目标字符” file
#tr "a-z" “A-Z” file
---------tr 用于单个字符的替换
第八、流文件编辑器---sed(不是交换模式,可用于脚本中的配置文件修改)
语法: sed [选项] 'script' file
-------script 是能够被sed理解的命令 ,包含:‘<行描述><动作>’
-------file 是cmd进行操作的一些文件
#sed -ire ' s/替换前内容/替换后内容/g' file
选项:-i 修改源文件并保存。没有改选项时,修改后内容显现都屏幕上,但是源文件并没有改变
-r 支持扩展的正则表达式(用以支持比较复杂的正则表达式)
-e 以选项中指定的script来处理输入的文本文件(此处的脚本 ” s“)
script 结构 :'行描述[/正则表达式/]动作'
例:删除 # sed '5d' filename 删除第5行,显示其他行
#sed '1,3d' filename 删除1-3行,显示其它行
#sed '4,$d' filename 删除从第4行到末行,显示其它行
替换 #sed 's/222/333/g' filename 将所有的222取代为333
转换 #sed '1,3y/[a-z]/[A-Z]/' filename
-------正则表达式
. --用于匹配任意一个字符
* --用于匹配它前面字符的任意多次
^ --用于匹配行首
$ --用于匹配行尾
[char] --用于匹配括号字符集中的某一个字符 []:匹配符 {} :枚举
[^char] --用于匹配没有在char字符集中的字符
\ --用于转义某个特殊含义的字符
\<the\> --用于完整匹配单词“the”,不会匹配“them”,"there","other"
/^$/ 表示空行
/^.*$/ 表示一整行
/*/ 表示一个或多个空格
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\} 表示ip地址
--------动作
-s 替换指定内容#sed -e -i 's/defaults/hello/g' /etc/file
-d 删除指定行 #sed -i -e '1,3d' /etc/file (删除1--3行)
#sed -e -i '/^#/d' /etc/file (删除以#开头的行)
-i 匹配行前插入
-a 匹配行后附加
-c 匹配行替换