一、正则表示法
什么是:正则表示法是处理字符串的方法,是以行为单位来进行字符串的处理行为,透过一些特殊符号的辅助,可以让使用者轻易达到搜寻、删除、取代某特定字符串的处理程序
正则表示法只是一种表示法,只要工具程序支持这种表示法那么该工具程序就可以用来作为正则表示法的字符串处理之用,例如:vi\vim、grep、awk、sed等,如果不支持正则表示法,例如:ls、cp就只能使用bash自己本身的通配符
使用时要注意环境的语系,否则会产生不同的撷取结果
grep的一些进阶选项
抓取相关信息(与XFS有关的)
信息的前2后3行也显示
dmesg | grep -n -A3 -B2 --color=auto 'XFS'
注意:grep在数据中查询一个字符串时是以整行为单位来进行数据的撷取的
一堆的练习指令:
grep -n 'the' regular_express.txt 列出有‘the’的行
grep -vn 'the' regular_express.txt 列出没有‘the’的行
grep -in 'the' regular_express.txt 忽略大小写
grep -n 't[ae]st' regular_express.txt 列出有tast或者test
grep -n 'oo' regular_express.txt 有两个o的
grep -n '[^g]oo' regular_express.txt oo前面没有g的
grep -n '[^a-z]oo' regular_express.txt oo前面没有字母的
grep -n '[0-9]' regular_express.txt 列出有数字的
grep -n '[[:lower:]]' regular_express.txt 列出有小写字母的
grep -n '^the' regular_express.txt 列出以the开头的
grep -n '^[a-z]' regular_express.txt 列出以小写字母开头的
grep -n '^[[:lower:]]' regular_express.txt 同上
grep -n '^[^a-zA-Z]' regular_express.txt 列出以字母开头的(大小写)
grep -n '\.$' regular_express.txt 列出以‘.’结尾的
grep -n '^$' regular_express.txt 寻找空白行
grep -v '^$' /etc/rsyslog.conf | grep -v '^#' 不要空白行 不要有注释的行
grep -n 'g.*g' regular_express.txt 找以g开头以g结尾的
grep -n 'o\{2\}' regular_express.txt\ 找有两个o的
grep -n 'go\{2,5\}g' regular_express.txt 找以g开头结尾且中间有2-5个o的
grep -n 'go\{2,\}g' regular_express.txt 找两个以上o的
sed
管线命令,可以分析standard input,可以将数据进行取代、删除、新增、撷取操作
nl /etc/passwd | sed '2,5d' 列出/etc/passwd删除2-5行
nl /etc/passwd | sed '2a drink tea' 在第二行后(第三行)添加drink tea
nl /etc/passwd | sed '2,5c No 2-5 number' 将2-5行取代为No 2-5 number
nl /etc/passwd | sed -n '5,7p' 仅打印5-7 行
除了整行的处理模式之外,sed还可以用行为单位进行部分数据的搜寻并取代的功能
sed 's/要被取代的字符串/新的字符串/g'
/sbin/ifconfig ens33 | grep 'inet ' | sed 's/^.*inet // g' | sed 's/ * netmask.*$//g' 提取IP地址
cat /etc/man_db.conf | grep 'MAN' | sed 's/#.*$//g'| sed '/^$/d' 提取与MAN相关的信息 并删除注释
二、文件的格式化与相关处理
格式化打印:print
使用方式类似于C
不是管线命令 要将数据提取出来给他才行
数据处理工具:awk
sed常常用于一整个行的处理,awk则倾向于一行当中分成数个字段来处理
适合处理小型的数据
awk '条件类型1{动作1} 条件类型2{动作2} …' filename
文件对比工具
diff 以行为单位比较
cmp 利用字节单位去比对,用的少
patch 可用于旧文件的更新和升级
文件打印准备:pr