一、文本间隔

1、在每一行后面增加一空行

sed G guo.sh

awk '{printf("%s\n\n",$0 ) }'

2、将文件中原来的空行删掉,并在在每一行后边增加一空行

sed '/^$/d;G '

awk '!/^$/ {printf("%s\n\n",$0 ) }'

3在匹配式样的行前插入一空行

sed '/good/i\\'

sed '/hello/{x;p;x;}'

awk '{ if(/hello/) printf("\n\%s\n",$0);else print $0}'

4、在匹配式样的行后插入一空行

sed '/good/a\\'

sed '/hello/G'

awk '{if(/hello/) printf("%s\n\n",$0) ;else print $0}'

5、在匹配式样的行前、行后各插入一空行

sed '/hello/{x;p;x;G;}'

awk '{ if(/hello/) printf("\n\%s\n\n",$0);else print $0}'

二、文本的替换

1、在每一行查找到good,然后把good替换为bad

sed 's/good/bad/'只把每行的第一个good替换为bad

sed 's/good/bad/2'只把每行的第二个good替换为bad

sed 's/good/bad/g'把每一行的所有good替换为bad

sed 's/\(.*\)good/\1bad/'只把每一行的的最后一个good替换位bad

sed 's/\(.*\)good\(.*good\)/\1bad\2/'只把每一行的的倒数第二个good替换位bad

awk   '{sub(/good/,"bad"); print $0}'只把每行的第一个good替换为bad

awk   '{gsub(/good/,"bad"); print $0}'把每一行的所有good替换为bad

cat  test |tr 'root' 'good'

cat    test |tr 'root' 'god'

sed   's/root/good/p' test

awk   '{gsub(/root/,"good");print $0}' test

awk   '{gsub(/root/,"god");print $0}' test

通过对比可知tr的替换两个字串必须等长度,而sed不能把说有的root替换

2、只在出现字符串fell字符串的前提下,将找到的行中的good替换为bad

sed  '/fell/ s/good/bad/g'

awk   '{if(/fell/) gsub(/good/,"bad"); print $0 }'

3、只在不出现字符串fell字符串的前提下,将找到的行中的good替换为bad

sed '/fell/ !s/good/bad/g'

awk '{if(!/fell/) gsub(/good/,"bad"); print $0 }'

4、不管是good、fell还是sun,一路替换为bad

sed 's/good/bad/g;s/fell/bad/g;s/sun/bad/g'

sed 's/good\|fell\|sun/bad/g'

awk '{gsub(/good|fell|sun/,"bad") ; print $0}'

5、倒置所有行,第一行变为最后一行(模拟tac)

sed '1!G;h;$!d'

sed -n '1!G;h;$p'

awk '{A[i++]=$0} END{for (j=i-1;j>=0;j--) print A[j]}'

6、将每两行连接为一行

sed '$!N;s/\n/ /'

awk '{f=!f;if(!f) printf("%s",$0);else printf("%s\n",$0)}'

7、在文件中每隔5行显示一空行

sed '0~5G'

sed 'n;n;n;n;G'

awk '{print $0 ;i++;if(i==5) {printf( "\n") ;i=0}}'

三、选择性的显示特定行

1、显示文件的前10行

sed10q

awk '{print ;if(NR==10) exit }'

2、显示文件的第一行

sed q

awk '{ print;exit}'

3、显示文件的倒数第二行

sed -e '$!{h;d;}' -e x当文件只有一行时,输出空行

sed -e '1{$q;}' -e '$!{h;d;}' -e x当文件只有一行时,显示该行

sed -e '1{$d;}' -e '$!{h;d;}' -e x当文件只有一行时,不输出

awk '{ B=A;A=$0} END{ print B}'当文件只有一行时,输出空行

4、只显示匹配正则表达式的行

sed -n '/good/p'

sed  '/good/!d'

awk '/good/ {print $0}'

awk '/good/'

grep 'good'

5、只显示不匹配正则表达式的行

sed -n '/good/!p'

sed '/good/d'

awk '!/good/ {print $0}'

grep -v 'good'

6、显示匹配行的上一行,而不显示匹配行

sed -n '/good/{g;1!p;};h'

awk '/good/ {print A} {A=$1}

7、显示匹配行的下一行,而不显示匹配行

sed -n '/good/{n;p;}'

awk '{if(A) print;A=0}/23/{A=1}'

8、显示文本的制定行

sed -n '3,5p'

sed '3,5!d'

awk '{if(NR>=3 &&NR<=5) print } '

目录: 1、不显示文件中的空行 2、删除文件的1到5行3、删除文件注释行4、打印匹配行5、显示从字符1到字符2的中间行6、匹配特别表达式7、替代文本

1、不显示文件中的空行

[guo@guo~]$ grep -v '^$' rc.local

[guo@guo~]$ sed -e '/^$/d' rc.local

[guo@guo~]$ awk '!/^$/{print $0 }' rc.local

2、删除文件的1到5行

[guo@guo~]$ cat test

[guo@guo~]$ sed -e '1,5d' test

[guo@guo~]$ awk '{if(NR>5 ) print $0} ' test

3、删除文件注释行

[guo@guo~]$ sed -e "/^#/d" rc.local

[guo@guo~]$ awk '!/^#/{print $0}' rc.local

[guo@guo~]$ grep -v '^#' rc.local

5、显示从字符1到字符2的中间行

[guo@guo~]$ sed -n -e '/hello/,/sorry/p' test1

[guo@guo~]$ awk '/hello/,/sorry/ {print $0 }' test1

6、匹配特别表达式

[guo@guo~]$ sed -n -e '/main[[:space:]]*(/,/^}/p' for.c

1、通过awk访问系统环境变量

[guo@guoawk]$ awk 'BEGIN { print ENVIRON["HOME"]; printENVIRON["PATH"]}'

/home/guo

/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin

2、awk中的算术运算符

[guo@guoawk]$ awk 'BEGIN {print "3+2=" 3+2 }'

3+2=5

[guo@guoawk]$ awk 'BEGIN {print "2^10=" 2^10 }'

2^10=1024

[guo@guoawk]$ awk 'BEGIN {print "(3+1)*4/2=" (3+1)*4/2}'

(3+1)*4/2=8

awk支持的运算符有+ - * / % ^。

4、awk的循环

if语句

[guo@guoawk]$ cat num

12243535

890232

232 9809

890 -8990

[guo@guoawk]$ awk '{if($1>$2) print $0}' num

890232

890 -8990

[guo@guoawk]$ awk '{if($1>$2) {print $0 ; print $1 "is larger than"$2}}' num

890232

890islarger than232

890 -8990

890islarger than-8990

if/else

[guo@guoawk]$ awk '{if($1>$2) print $1 ;else print $2}' num

3535

890

9809

890

[guo@guoawk]$ awk '{if($1>$2) {count++ ;print count} else print $2}' num

3535

1

9809

2

2012年10月9日 14:50:38

如何用sed打印文件范围从第二行至倒数第二行?   转自:http://bbs.chinaunix.net/thread-3700991-1-1.html

普通青年版:

  1. sed '1d;$d'

文艺青年版:

  1. sed -n '1!P;N;$q;D'

二逼青年版:

  1. sed -r ':a;N;$!ba;s/^[^\n]+\n(.+)\n[^\n]+$/\1/'

最新文章

  1. css中的负边距
  2. 原生js与jquery操作iframe
  3. IE10 透明背景的div无法遮罩
  4. frame和bounds的区别与联系
  5. 关于Reapter多重嵌套的详细补充
  6. 10分钟制作自己的手机QQ
  7. 字符串编码、Base64字符串 互转
  8. 【测试】解决loadrunner11无法运行负载测试
  9. Python学习的一些好资料
  10. v9站点自定义变量
  11. Android attrs.xml文件中属性类型format值的格式
  12. (转)在.net中序列化读写xml方法的总结
  13. hadoop(二)搭建伪分布式集群
  14. POI实现大数据EXCLE导入导出,解决内存溢出问题
  15. Flexbox布局指南
  16. C++中public/protect/private三种访问权限控制
  17. python测试开发django-51.Ajax发送post请求登录案例
  18. nfs 提高传输速度
  19. iOS动画-从UIView到Core Animation
  20. Codeforces 524E Rooks and Rectangles 线段树

热门文章

  1. Service官方教程(3)Bound Services
  2. Proactive Patching Overview
  3. RabbitMQ七:交换机类型Exchange Types--Fanout 介绍
  4. ES5之变量
  5. Android 实现对多个EditText的监听
  6. orcale 数据库的一些知识
  7. oracle DBA笔试题
  8. select * from a, b的意思
  9. CSS中常用属性之字体属性
  10. 新建 vue项目时报错,无法成功搭建项目