第12章 正则表达式与文件处理
grep
的一些参数
-A after
,后边几行也列出来
-B before
,前面几行也列出来
-n
显示行号
ex:
dmesg | grep -n -A3 -B2
12.2 基础正则表达式
例题1:查找特定字符串
grep -n 'the' re.txt
grep -vn 'the' re.txt #反向选择
grep -in 'the' re.txt #忽略大小写
例题2:利用中括号查找集合字符
grep -n 't[ae]st' re.txt #中括号内集合只代表一个字符
grep -n '[^g]oo' re.txt #反向选择
grep -n '[^[:lower:]]oo' re.txt #小写字母
grep -n '[[:digit:]]' re.txt #数字
grep -n '\.$' re.txt #以.号结尾的行
grep -n 'g..d' re.txt #两个固定的字符
grep -n 'ooo*' re.txt #至少两个以上的字符
sed 编辑行 [n1 [, n2]] function #类似于ex
`-n silent`
`-r ERE`
`-i` 直接修改读取的文件内容
a c d i p(print) s
ex1:
nl /etc/passwd | sed '2,5d'
ex2:
nl /etc/passwd | sed '2a drink tea'
ex3:
nl /etc/passwd | sed '2,5c NO 2-5 number' #替换2-5行为NO 2-5 number
ex4:
nl /etc/passwd | sed -n '5,7p' #列出5-7行
替换功能:
sed 's/old/new/g'
直接修改文件内容
sed -i 's/\.$/\!/g' #将行尾的.替换为!
12.3 扩展正则表达式
egrep
+(>=1),?(>=1),(),()+多个重复组的判别
12.4 文件的格式化相关处理
12.4.1 格式化打印:printf
12.4.2 awk
:好用的数据处理工具
awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
awk
主要是处理每一行的字段内的数据,而默认的字段分隔符为space
或tab
。
ex:
last -n 5 | awk '{printf $1 "\t" $3}'
每一个字段的名称分别是$1,$2, $3...
$0代表一整行数据
变量名称 代表意义
NF 每一行的字段总数
NR 第几行
FS 分隔符,默认是space(48)
ex:
last -n 5 | awk 'print $1 "\t lines: " NR "\t columes: " NF'
12.4.3 文件比较工具
diff
-b 忽略一行中多个空白的区别,程序
-B 忽略空白行的区别
-i 忽略大小写的区别
patch
ex:
diff -Naur passwd.old passwd.new > passwd.patch
patch -pN < patch #更新
patch -R -pN < patch #还原
N表示取消几层目录的意思,0
-R 还原
12.4.4 文件打印准备
pr