类似于编程的正则表达式
[a-z],[A-Z],[0-9][^非] ^开头$结尾 .任意一个字符 *重复前一个字符(0或多个)
'\{重复次数n\}' '\{重复次数n1,\}' '\{重复次数n1,n2\}'
? :0-1,+ :1~,| :or,(分组)
格式化打印:printf
printf '%10s %5i %5i %5i %8.2f \n'`cat filename.txt | grep -v name`
sed: sed [-nefr] [动作]
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作
是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function 有底下这些咚咚:
a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配 正规表示法!例如 1,20s/old/new/g 就是啦!
eg:删除2-5行: nl /etc/passwd | sed '2,5d'
取包含inet关键字的那一行,只取IP地址(其余使用sed 's替换为空' ):
ifconfig eth0 | grep 'inet ' |sed 's/.*addr://g'|sed 's/Bcast:.*//g'
awk: awk '条件类型1{动作a;动作b;...} 条件类型2{动作c..}... ' filename
eg: last |awk '{printf $1 "\t" $3"\n"}'last | awk '{printf $1 "\t lines:"NR"\t columes:"NF"\n"}'
第三栏小于 10 以下的数据,并且仅列出账号与第三栏:
cat /etc/passwd | awk '{FS=":"} $3 < 10 {printf $1 "\t" $3 "\n"}' --第二行开始
cat /etc/passwd | awk 'BEGIN{FS=":"} $3 < 10 {printf $1 "\t" $3 "\n"}' --第一行开始
awk执行流程:
1. 读入第一行,并将第一行的资料填入 $0, $1, $2.... 等变数当中;
2. 依据 "条件类型" 的限制,判断是否需要进行后面的 "动作";
3. 做完所有的动作与条件类型;
4. 若还有后续的『行』的数据,则重复上面 1~3 的步骤,直到所有的数据都读完为止。
awk变量:
变量名称
代表意义
NF
每一行 ($0) 拥有的字段总数
NR
目前 awk 所处理的是『第几行』数据
FS
目前的分隔字符,预设是空格键
文档比较:diff,cmp
diff: diff [-biB] srcFilename destFilename 比较出所有的不同
eg: 文档比较:diff /etc/passwd /tmp/test/passwd
目录比较:diff /etc /tmp/test
cmp: cmp [-s] srcFilename destFilename 输出第一个不同点 行列
eg: 文档比较:cmp /etc/passwd /tmp/test/passwd