`
chinamming
  • 浏览: 139069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

sed和awk的常用实例

 
阅读更多

一、文本间隔

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/'


分享到:
评论

相关推荐

    sed和awk使用实例

    sed和awk使用的几个经典实例,都是比较典型的,可能经常会用到

    grep,sed,awk命令实例大练习

    grep,sed,awk命令实例大练习,好东西大家分享

    UNIX Shell awk sed 实例 精解 (第4版)

    linux下常用脚本命令集合 : awk sed bash shell Shell范例精解(第4版)

    实例秒解sed和awk的秘密

    sed命令_Linux sed 命令用法详解:功能强大的流式文本编辑器

    shell最全基础2020年入门—从熟悉grep、sed、awk开始

    sed使用实例五、文本处理三剑客 — 文本分析工具awk1. 什么是awk2. awk的用法:3. awk中字符的含义:4. awk使用实例六、作者有话要说 前言 本文是对shell以及文本三剑客grep、sed、awk进行科普,如果对shell脚步...

    使用sed grep工具过滤实例

    在处理庞大数据量时,善用Linux三剑客sed grep awk能省下不少劲。文档例子仅供参考学习!

    Perl实例精解(第四版).part2

    Perl 脚本在功能上类似于UNIX awk、sed、shell 脚本和C 程序。shell 脚本主要由UNIX 命令构成,Perl 脚本则不然。sed 和awk 用于编辑和报告文件,但是Perl 无需执行文件即可工作。C 没有shell、sed 和awk 的任何模式...

    example-cassandra-dsbulk-with-sed-and-awk

    在本演练中,我们将使用dsbulk从实例中卸载数据,使用awk和sed进行数据转换,然后将其加载到Dockerized Apache Cassandra实例中。 您可以使用以下两种类型的Cassandra分布的任意组合来完成本演练:Apache Cassandra...

    shell脚本之正则表达式、grep、sed、awk

    –正则– 基础正则 ^word ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$ ##搜索以word结尾...\w ##匹配任意一个字符和数字 * ##重复0次或多次前面的一个字符 .* ##匹配所有字符。例:^.* 以任意多个字符开头,

    shell 编程实例

    shell 编程实例,awk实例,sed实例

    Linux+Shell命令行及脚本编程实例详解-刘艳涛.mobi kindle版

    Linux及Linux Shell简介、初识Linux Shell、常用Shell(Bash)命令、Shell命令进阶、Shell编程基础、Shell的条件执行、Bash循环、Shell函数、正则表达式、脚本输入处理、Shell重定向、管道和过滤器、捕获、sed和awk...

    linux文本处理命令

    文本处理命令,包括find,xargs,grep,sed,awk命令的详解及实例分析。

    一天一个shell命令 linux文本内容操作系列-sed命令详解

    sed和awk是文件编辑最重要的两个命令了。尤其涉及到了很多正则表达式的问题,笔者不敢也有点犯怵,试着写写。 实例: 1.替换文件中的字符串 $sed -i ‘s/text/replace/g’ file #如果不加g结尾,则替换每一行的第一...

    《unix_shell_实例精解》学习笔记

    shell编程宝典非常实用的shell编程开发资料,详细的sed,awk。grep的用法。

    awk用法详解

    linux文本处理三剑客之一,sed的基础、进阶的各种用法,已实例为依据

    snp_result.tab

    个人博文sed & awk之sed实战 (https://blog.csdn.net/zheyepianzhou/article/details/108283625) 结果实例

    12本精彩的Linux书籍

    我平常用于sed 和awk的参考的是由相同作者所著的《Sed and Awk Pocket Reference》。 2. HULearning The Vi and Vim EditorUH,作者Arnold Robbins。 我对于命令行下的操作情有独钟。因此,自然地我非常喜欢Vi 和 ...

    Perl 实例精解(第三版).pdf

    练习6 它是sed、awk或grep吗?尝试Perl 第8章 获得控制:正则表达式元字符 8.1 正则表达式元字符 8.1.1 用于单字符的元字符 8.1.2 白空元字符 8.1.3 重复模式匹配的元字符 8.1.4 tr或y函数 8.2 统一...

    UNIX Shell 实例精解

    对c、Bourne和Korn Shell及Awk、Sed和Grep的全面指导。

    一天一个shell命令 linux文本内容操作系列-awk命令详解

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk...

Global site tag (gtag.js) - Google Analytics