linux-正则表示法

类似于编程的正则表达式

[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

你可能感兴趣的:(linux-正则表示法)