AWK实例:
-
特殊变量: RS ORS FS OFS NR NF
-
RS -- 记录分隔符,默认的分隔符是\n
-
ORS -- 记录输出分隔符,默认的分隔符是\n
-
FS -- 指定列分隔符
-
OFS -- 列输出分隔符
-
NR -- 记录行数
-
NF -- 列的总个数
-
-
--------------------------------------------------------------------------------
-
-
ifconfig eth0 | awk -F'[ |:]+' 'NR==2 {print $4}' #获取eth0的IP地址
-
ifconfig eth0 | awk 'BEGIN{FS="[ |:]+"} NR==2 {print $4}' #效果与上面一样
-
-
--------------------------------------------------------------------------------
-
-
awk '/^$/ {x++} {print x}' test.txt #获取test.txt文件中空行的数目
-
-
--------------------------------------------------------------------------------
-
-
echo "AAA BBB CCC" | awk 'BEGIN{OFS=":"} {print $1,$2,$3}' #已分隔符:,输出内容,输出结果为 AAA:BBB:CCC。 重点为OFS定义输出分隔符
-
echo "AAA BBB CCC" | awk 'BEGIN{OFS=":"} {NF=NF;print $0}' #其结果与上面一样,只是在很多字段的时候这样更方便快捷。
-
-
--------------------------------------------------------------------------------
-
-
awk '{if($2==222 && $3=="AAA") print $0}' test.txt #多个字段匹配输出
-
awk '{if($2~/^222$/ && $3~/^eee$/)print $0}' test.txt
-
-
--------------------------------------------------------------------------------
-
-
-
awk '{if($2 == 222) print "ok"; else if($2==333) print "error"}' test.txt #多条件判断
-
awk '{($2 == 222) ? name="ok" : name="error";print name}' test.txt #if ...else可以采用 ? :方式
-
-
--------------------------------------------------------------------------------
-
-
awk 'BEGIN{i=1;while(i<=4) {print i;++i;}}' #while循环,打印1-4
-
seq 1 10 | awk '{while($0~7){print $0;exit}}' #匹配7输出
-
awk 'BEGIN{do{++x;print x}while(x<=4)}' #do ... while 循环: 此处输出1..5
-
awk 'BEGIN{for(i=1;i<=5;i++) print i}' #for循环
-
awk '{++name[$NF]}END{for(n in name)print n,name[n]}' test.txt #打印每行记录出现的次数
-
netstat -an | awk '/^tcp/ {++state[$NF]}END{for(n in state) print n,state[n]}' #打印主机网络连接各种状态数据
-
awk '{$1=NULL;print $0}' test.file #对于不打印某列,我们可以指定其值为空(null)
SED实例
-
快速删除文本中空行
-
sed -i -n 'L' text.txt
-
echo -e "aaa\nAAA\nEEE" | sed -n '/EEE/=;' #打印EEE在那一行,关键参数"="
-
echo -e "aaa\nAAA" | sed -n 's/a/Y/igp' #不区分大小写把a或A替换为Y;
-
echo "hello world" | sed 's/ */ /g' #删除字符间多个空格(由多个变为一个),*前面为两个空格
-
echo " this is a test message " | sed 's/^ *//g;s/ *$//g' #删除行前行尾空格
-
echo "/usr/local/python" | sed 's#/usr/local#/opt#g' #替换命令,默认使用/作为定界符,如果需要匹配的字符中包括/,则我们可以选择其他符号作为定界符。比如:! #等
-
echo "AAA:BBB:CCC:DDD" | sed 's/:/>/g' #替换所有:为>
-
-
#以下分别把第一次、二次、三次出现:替换为>。
-
echo "AAA:BBB:CCC:DDD" | sed 's/:/>/1'
-
echo "AAA:BBB:CCC:DDD" | sed 's/:/>/2'
-
echo "AAA:BBB:CCC:DDD" | sed 's/:/>/3'
-
-
#回调匹配内容
-
echo -e "one:two\nfirst:second" | sed 's/\(.*\):\(.*\)/\2:\1/' #此处\1表示匹配第一个括号中内容,\2表示匹配第二个括号中内容。
-
df -h | sed -n '/sda/ s/M/MB/gp' #匹配替换,并单独输出匹配的那一行。
-
-
-
--------------------------------------------------------------------------------
-
-
SED追加、插入与更改:
-
\i 插入命令将所提供的文本放置在模式空间的当前行之前
-
\a 追加命令将所提供的文本放置在模式空间的当前行之后
-
\c 更改命令将所提供的文本取代模式空间的内容。(支持多行)
-
-
-
以下法子只限与文本中没匹配以A开头的多行
-
-
-
echo -e "AAA\nBBB" | sed '2i\\' #在AAA、BBB之间插入一空行
-
-
--------------------------------------------------------------------------------
-
-
sed n命令:
-
sed -n '/111/{n;/^A/p}' 1.txt
-
首先找到匹配111的行,然后跳到匹配行的下一行,如果如果此行匹配以A开头,则打印出来
-
-
sed 'n;d' 1.txt #删除偶数行
-
实例一: 当空行跟随一个匹配模式的行时,则删除该空行
-
【如果空行跟在匹配1111的下面则删除此空行】
-
-
-
【如果匹配的1111在匹配的AAAA下两行,则删除匹配1111的行】
-
-
-
--------------------------------------------------------------------------------
-
-
高级SED
-
处理了多行模式空间(N,D,P)
-
采用保持空间来保存模式空间的内容并使它可用于后续的命令(H,h,G,g,x).
-
编写使用分支和条件指令的脚本来更改控制流(:、b、t)
-
----------------------------
-
p,P对比测试:
-
p【打印模板块的行】
-
P【打印模板块的第一行】
-
-
----------------------------
-
n,N 对比测试:
-
-
-
d,D对比测试:
-
将多个空行减少到一行:
-
-
-
采用保持空间来保存模式空间的内容并使它可用于后续的命令(H,h,G,g,x).
-
Hold 【h,H 将模式空间的数据复制或追加到保持空间】
-
Get 【g,G 将保持空间的数据复制或追加到模式空间】
-
Exchange 【x 交换保持空间和模式空间的内容】
-
同一命令的大小写字母的区别是:小写字母命令改写目的缓存区的内容,而大写字母命令追加缓存区的现有内容。
-
-
--------------------------------------------------------------------------------
-
-
实例:
-
sed G test.file #在每行后面加入一空行
-
sed '/^$/d;G' test.file #在每个非空行的后面加入一空行。G;G;代表两个空行
-
sed 'n;G' test.file #在文件偶数行后面加入空行
-
-
替换位置:
-
首先通过h命令将第一行复制到保持空间,在执行d命令清除模式空间。然后将第二行读入到模式空间,并且将保持空间的行追加到
-
模式空间的结尾.
-
-
-
y 【大小写】
-
echo "hello held" | sed 'y/h/H/'
-
echo "Hello Held" | sed 'y/H/h/'
-
-
-
--------------------------------------------------------------------------------
-
-
高级流控制
-
分支(b)与测试(t)
-
以下命令解释: 如果匹配root则跳到标签there (:there),执行:there后面的语句:/root/ s/G/GB/g
-
不匹配的话就执行s/M/MB/g语句
-
阅读(860) | 评论(0) | 转发(0) |