`
chinamming
  • 浏览: 151189 次
  • 性别: 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 使用实例 Sed 和 Awk 是两种强大的命令行工具,在 Unix 和 Linux 系统中广泛应用于文本处理和数据处理。本文将通过一些实例来展示 Sed 和 Awk 的使用场景和方法。 一、sed 使用实例 1. 删除 login....

    SED与AWK 高清第三版

    在学习sed和awk时,了解它们的基本语法和常用命令是首要的。sed的操作主要包括插入、删除、替换、打印等,而awk则需要理解其工作模式(BEGIN、END、模式规则)、字段分隔符、内置变量和函数等概念。通过实际的案例...

    Sed与Awk (中文版)

    通过这些实例的学习,用户不仅能够吸收前人经验,而且能够了解到sed和awk在实际工作中的应用价值。 总之,sed和awk都是UNIX系统中不可或缺的工具,它们在文本处理和数据处理方面提供了强大的功能。通过本书的学习,...

    Sed与awk第二版(中文高清版)

    它不仅系统地介绍了sed和awk的使用方法,还通过实例演示了如何编写有效的脚本来处理文本数据。对于那些希望提高自己在Linux环境中处理文本和数据能力的用户来说,这本书是一个极佳的学习资源。 Sed的常用功能包括但...

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

    ### grep、sed、awk命令实例大练习 在Linux或Unix环境中,`grep`、`sed`和`awk`是三个非常强大的文本处理工具。通过掌握这些工具的基本用法及高级功能,用户可以高效地处理各种文本文件。下面将详细介绍如何使用...

    sed & awk 第二版 例程 源代码 源码 sed & awk sourcecode

    在sedawk2progs这个压缩包中,包含了书中所有例程和源代码,这对于学习和实践这两个工具至关重要。读者可以逐个运行这些程序,观察它们如何工作,并在此基础上进行修改和扩展,以满足自己的实际需求。通过这种方式,...

    sed与awk+第三版和源代码

    在本书的第三版中,作者可能会详细讲解sed和awk的基本语法,包括正则表达式、模式空间、命令行选项等,并通过实例来展示如何使用这两个工具。同时,源代码文件(progs.tar.gz)很可能是书中各个例子的源代码集合,读者...

    Sed&Awk 2th Edition

    掌握Sed的基本语法和常用命令,能够高效地完成文本自动化处理任务。 Awk则是一个更加强大的文本解析工具,它允许用户定义自己的模式和动作。与Sed不同,Awk可以处理整个记录(即一行),并能执行更复杂的逻辑。Awk...

    linuxsed与awk第三版

    10. 实战案例:通过丰富的实例,展示sed和awk在实际工作中的应用,如日志分析、数据转换和报告生成等。 通过阅读本书,读者不仅可以掌握sed和awk的基本操作,还能深入了解它们的高级特性和用法,从而在面对各种文本...

    sed与awk(第二版)

    在Linux世界中,文本处理工具是日常操作的重要组成部分,尤其是sed和awk,它们与grep一起被誉为"三剑客"。本文将深入探讨这两个强大的命令行工具,解释它们的基本概念、功能以及如何在实际工作中有效利用。 sed...

    Sed与awk第三版(高清版)

    9. **学习资源**:《sed与awk》一书提供了深入浅出的讲解和实例,是学习这两个工具的优秀教材。书中涵盖了基础概念、高级技巧以及实战应用,适合初学者和进阶用户。 10. **社区和交流**:通过QQ群(如书中提到的...

    sed&awk;

    ### sed和awk工具详解 #### 一、引言 在Linux和Unix系统中,文本处理是一项常见的需求。其中,`sed`(stream editor)和`awk`是两款非常强大的文本处理工具,它们不仅功能强大而且极其灵活。本文将详细介绍这两款...

    Sed与awk第三版 高清版

    《Sed与awk第三版》是一本专注于文本处理和数据操作的经典著作,由张旭东等人翻译的中文高清版。Sed(Stream Editor)和Awk是Linux/Unix环境中两个强大的命令行工具,广泛用于数据提取、转换和报告生成。它们在IT...

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

    本指南将深入解析这些工具的使用实例和精解,帮助读者理解并掌握这些强大的命令行工具。 **Bash Shell** 是Linux系统中的默认shell,它是一种交互式、解释型的命令行接口。Bash提供了一系列的命令、变量、运算符...

    实例秒解sed和awk的秘密

    在Linux系统中,`sed`和`awk`是两个非常重要的文本处理工具,它们在处理大量数据时展现出强大的威力。本文将深入解析这两个命令的使用方法,并通过实例帮助你快速掌握它们的秘密。 **sed(Stream Editor):** `...

    sed与awk精研

    《sed与awk精研》是一本深入探讨Linux系统中sed和awk命令的书籍,它针对这两个强大的文本处理工具提供了详尽的讲解和实例。sed,全称Stream Editor,主要用于对输入流(数据流、文件或管道)进行各种文本转换操作。...

    Sed and Awk 101 Hacks

    本书《Sed and Awk 101 Hacks》面向希望提升自己在Unix/Linux系统操作能力的开发者、系统管理员、数据库管理员或IT管理员,旨在帮助读者快速掌握Sed和Awk的核心用法,并通过实例讲解如何将这些工具用于实际问题解决...

    centOS丛书sed和awk

    ### CentOS丛书sed和awk知识点详解 #### 一、sed简介及使用 **1.1 sed的概念** sed(stream editor)是一种非交互式的行编辑器,主要用于处理文本文件。不同于交互式编辑器(如vi),sed在命令行环境中运行,通过...

    sed&awk

    在《sed&awk》这本资源中,很可能包含了关于这两款工具的详细教程、实例解析以及高级用法。学习者可以从中了解到如何编写sed和awk脚本来解决实际问题,例如日志分析、文件转换、数据提取等。通过深入学习,你将能够...

    sed命令和awk编程教程

    ### sed命令和awk编程教程知识点概述 #### 一、sed命令基本概念与使用方法 - **sed命令简介**: - `sed` 是一个非交互式的流编辑器(Stream Editor),主要用于自动化文本处理任务,尤其适合处理大型文件或者复杂的...

Global site tag (gtag.js) - Google Analytics