linux三剑客和管道使用
管道符|
- 管道符将两个命令隔开,管道符左边命令的输出作为管道符右边命令的输入
grep命令
- 对文件中的行进行正则匹配过滤
- grep [option] pattern file
- 正则表达式
- 记录文本规则的代码,正则表达式匹配文本中的字符串
- 常用的元字符
.
匹配除换行符以外的任意字符\w
匹配字母或者数字或下划线或汉字\s
匹配任意空白符\d
匹配数字\b
匹配单词的开始或结束^
匹配字符串的开始$
匹配字符串的结束
- 常用的限定符
*
重复零次或更多次+
重复一次或更多次?
重复零次或一次{n}
重复n次{n,}
重复n次或更多次{n,m}
重复n到m次
- 常用参数
-v
显示不被模式匹配的行-i
忽略字符大小写-n
显示匹配的行号-c
统计匹配的行数-o
仅显示匹配到的字符串-E
使用ERE,相当于egrep- 基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已
- BRE: 只有^$.*[]是元字符
- ERE: ^$.[]*+(){}?|都是元字符
sed命令
- 对文件中的行进行流编辑,不会影响原有的文件内容
- sed [-hnV][-e(script)][-f(script文件)][文本文件]
- -e(script)或--expression=(script) 以选项中指定的script来处理输入的文本文件。
- -f(script文件)或--file=(script文件) 以选项中指定的script文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示script处理后的结果。
- -V或--version 显示版本信息
- script动作说明
- a :新增, 某行后面新增一行,例如
sed -e '4a newline' test.txt
- i :插入, 某行前面新增一行,例如
sed -e '4i newline' test.txt
- c :取代, 可以取代n1,n2之间的行,例如
sed -e '4,6c oldline\nnewline' test.txt
- s :取代,可以搭配正则,例如
sed -e '1,20s/old/new/g' test.txt
,/g表示全局替换,不加/g表示替换每一行中的第一个匹配到的字符串 - d :删除,可以取代n1,n2之间的行,例如
sed -e '4,6d' test.txt
- p :打印,将某个选择的数据印出,通常p会与参数 sed -n一起运行,例如
sed -n '/root/p' test.txt
,//里面是正则-
- a :新增, 某行后面新增一行,例如
-i
参数直接修改文件内容,例如sed -i 's/old/new/g' test.txt
awk命令
- 把文件逐行读入,以空格为默认分割符将每行切片,切分成不同的列,切开的列再进行后续处理
- $0是读取的整行内容,$1是第一列
- awk 'pattern + action' filenames,pattern就是正则表达式,action对匹配到的内容执行的命令(默认为输出每行内容)
-F
fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:-v
var=value:赋值一个用户定义变量,将外部变量传递给awk-f
scripfile:从脚本文件中读取awk命令
- 内置变量
- FILENAME awk浏览的文件名
- BEGIN 处理文本前要执行的操作
- END 处理文本后要执行的操作
- FS 输入列分隔符,等价于-F,默认为空白字符
- OFS 输出列分隔符,默认为空白字符
- RS 输入行分割符,指定输入时的换行符,原换行符仍有效
- ORS 输出行分割符,输出时用指定符号代替换行符
- NF 列数,$NF引用最后一列,$(NF-1)引用倒数第2列
- NR 行数
- $0 整条行内容
- $1 表示当前第一列
- 冒号为分割符,匹配root的行,打印第7列
awk -F : '/root/{print $7}' /etc/passwd
- 指定第二行,打印整个行
awk 'NR==2{print $0}' /etc/passwd
- 使用begin加入标题
awk -F : 'BEGIN{print "BEGIN BEGIN"} {print $1,$2}' /etc/passwd
- 以|为标志分割行
echo '111 222|333 444|555 666' | awk -v RS='|' '{print $0}'
- 计算文件大小
ls -l *.txt | awk '{sum+=$5} END {print sum}'
我在想我要不要写一句励志的话......