sed 与 awk

一、sed (stream editor based on line)

1.1 基本用法

sed默认情况下不编辑源文件,仅对模式空间中的数据做处理

sed ‘AddressCommand‘ file ...

Address表示方法:

1、起始行和结束行

例子:1,100 表示第一行到100行

2、使用模式

/RegExp/ 使用正则表达的模式。例子:/^root/ 以root开头的行

3、/pattern1/,/pattern2/

指的是第一次被模式1匹配到的行开始,至第1次被模式2匹配到的行结束,中间的所有航

4、LineNumber

指定的行 ,$表示最后一行,$-1 表示倒数第二行

5、StartLine,+N

从startLine开始,向后的N行。

Command:

1)d:删除符合条件的行

例如:sed "1,2d" /etc/fstab 删除前两行,处理结束后,将模式空间打印到屏幕

sed ‘3,$d‘ /etc/fstab

sed ‘/^\//d‘ /etc/fstab 显示以斜线开始的行

2)p:显示

sed ‘/^\//p‘ /etc/fstab显示以斜线开头的行,,结果符合条件的显示了两次

应使用

sed -n ‘/^\//p‘ /etc/fstab

3) a \"string":在匹配到的行后面增加一行,内容为“string”

sed -n ‘/^\//a \# hello world‘ /etc/fstab

在符合条件的行后面加一行hello world

sed -n ‘/^\//a \# hello world\n#hello linux ‘ /etc/fstab

在符合条件的行后面加一行hello world

4)i \string :在指定的行前面增加一行,内容为"string"

5)r 跟文件名:将指定的文件的内容添加到符合条件的行处

例子:

sed ‘2r /etc/issue‘/etc/fstab

在第二行后面把/etc/issue整个文件加进来

sed ‘1,2r /etc/issue‘/etc/fstab

在第1行和2行后面把/etc/issue整个文件加进来

6)w 将地址指定范围内的内容另存至指定的文件中。

sed -n ‘/oot/w /tmp/oot.txt‘ /etc/fstab

将/etc/fstab 中 含有oot的行存储到oot.txt

7)s /pattern/string/修饰符 :查找并替换。此三个斜线可以用任意字符作分隔符,如 [email protected]@@

例子

sed ‘s/oot/OOT/‘ /etc/fstab 查找oot替换为大写的OT

sed ‘s/^\//#/‘ /etc/fstab 将行首的斜线替换成#

如果不限定行首,则只替换每一行中第一次被模式匹配到的串

加修饰符

g:全局替换,只要找到替换

例子sed ‘s/\//#/g‘ /etc/fstab 全局替换

i:查找时忽略大小写

grep 后项引用 前面括起来,后面用\1 ,\2,\数字来引用

创建文件test.txt,写入内容

hello,like

hi,my love

sed ‘s#l..e#l..er#g‘ test.txt 执行未达到预期结果,因为后项不支持正则表达式

sed ‘s#l..e#&r#g‘ test.txt &可以支持后项引用

硬用后项引用 则用反斜线转义括号

sed ‘s#\(l..e\)#\1r#g‘ test.txt

只使用前面匹配到的一部分,则只能用后项引用了

把like改成Like

把love改成Love

sed ‘s#l\(..e\)#L\1#g‘ test.txt

options:

-n :静默模式,不显示模式空间中的。只跟命令相关

-i :直接修改源文件慎用

-e SCRIPT -e SCRIPT:每个后面跟一组脚本,同时使用多次

-f /path/to/sed_SCRIPT:

sed -f /path/to/script file

-r :允许使用扩展正则表达式

例子:

history | sed ‘s#^[[:space:]]*##g‘

===========================================

1、删除/etc/grub.conf文件中行首的空白字符

2、替换/etc/inittab文件中"id:3:initdefault:" 一行中的数字为5

3、删除/etc/inittab文件中的空白字符

4、删除/etc/inittab文件中的开头的#号

4、删除/etc/inittab文件中的开头的#号及后面的空白字符,#号后面有空白字符的才可以删

4、删除某文件中以空白字符跟了#这样的类的行中的空白字符和#(#前面的空白字符)

5、取出一个文件路径的目录名称。例如:

/etc/rc.d

/var/log

echo "/etc/rc.d" | sed

二、awk

2.1 基本用法

时间: 2024-11-11 16:11:28

sed 与 awk的相关文章

sed和awk之awk篇

(原创文章,谢绝转载~) awk是处理文本的另一利器,也是对文本逐行处理.awk的基本syntax是: awk 'pattern {action} ' inputfile #examples awk '/regex/ { print $0 }' inputfile 在awk中用 $1,$2,$3.... 表示每行的第1,2,3....列,而 $0 表示整行数据 另有内置变量,借助awk的这些内置变量,可以非常方便的处理文本: NF ,列数(Number of Fileds),进而 $NF 为最后

Shell脚本编程与sed,awk工具的使用--9月15日课程作业

一.shell程序的运行原理 1.脚本 脚本或程序源文件是一种文本文件,将文本文件转换成机器指令有两种转换方式: 编译执行:预处理-->编译-->汇编-->链接:事先完成,结果:二进制程序文件 例如:C, C++ 解释执行:由解释器全程参与运行过程,每次读取一行,运行一行: 例如:  Python:程序控制结构,调用编程库完成程序编写: 库文件:功能模块,在编程中可调用: Bash:调用机器上命令程序文件进行程序编写: 外部命令:各应用程序提供: 2.原理 当shell运行一个程序时,会

日志分析查看——grep,sed,sort,awk运用

概述 我们日常应用中都离不开日志.可以说日志是我们在排查问题的一个重要依据.但是日志并不是写了就好了,当你想查看日志的时候,你会发现线上日志堆积的长度已经超越了你一行行浏览的耐性的极限了.于是,很有必要通过一些手段来高效地辅助你来快速的从日志中找到你要找的问题.本文通过一个从项目中衍生出来的例子从查找日志,筛选日志和统计日志3个方面层层递进来简述日志文件查看中一些有用的手段.(注:在linux环境下) 目录 0.查找关键日志grep 1.查找关键日志grep 2.精简日志内容 sed 3.对记录

第14章 grep、sed、awk 正则表达式

1. 如何把 /etc/passwd 中用户uid 大于500 的行给打印出来?   awk -F ':' '$3>500' /etc/passwd2. awk中 NR,NF两个变量表示什么含义?awk -F ':' '{print $NR}' /etc/passwd  会打印出什么结果出来?    NR 表示行 : NF表示列 awk -F ':' '{print $NR}' /etc/passwd   会依次打印对应的行数的段,第一行打印第一段,第二行打印第二段... 到了最后就打印空行了 

linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)

本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html以此为例: cat test.sh test1.sh 2>/dev/null | grep -n 'echo' 此时若test.sh 不存在,报错信息不会输出到屏幕中,而是转入 /dev/null中,如

正则、grep、sed、awk

每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正则表达式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则只使用于支持这种表示法的工具,如:vi,grep,sed.awk.而ls等命令不支持这种表示,只能使用bash自身的通配符. 基础部分: [abc] 匹配括号中的一个 [^abc] 匹配非括号中的一个(取反) ^word 以word开头 word$ 以word结尾 [n1-n2] 从n1到n2之间的所有连续字符. 注意:这个连续与否,与ASCII编码有关,

grep、sed、awk

正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式由一些普通字符和一些元字符(metacharacters)组成. 检索工具:grep grep [-cinvABC] 'word' filename:根据关键字或正则表达式在文件中查找匹配的行 -c:显示匹配行数 -i:不区分大小写 -n:显示行号 -v:显示不匹配的行 -An:连匹配行的下面n行一起显示 -Bn:连匹配行的上面n行一起显示 -

bash sed和awk

随着科技的发展,软硬件的不断更新.人们通过计算机逐渐从重复性劳动工作中解脱出来,那么计算机如何通过程序执行命令来实现我们预先设定好的步骤呢,请看下图: 一.我们知道计算机由硬件和软件组成.而软件又分为系统内核跟应用程序:当用户查看一条信息,或者编译一个程序指令,那么他的交互就由计算机通过系统内核调用程序接口,执行单一或者单一指令组成的复杂的程序组成,执行完后,又通过程序接口返回到内核通过输入输出设备呈现在大家面前. 二.程序接口按照他们的语法和编译方式将程序汇编或者调用成系统内核可以识别的指令进

shell之三大文本处理工具grep、sed及awk

grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍. grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多: sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed: awk:报告生成器,格式化以后显示.如果对处

Linux Shell之十 sed与awk

设计script时,有时候需要修改脚本,例如删除或置换某些关键词.像这种在script执行过程动态修改文件的做法,称为流编辑.具有流编辑能力的工具,称为流编辑器.sed是这方面的强者.另外script执行时可能要制作报表,呈现各字段信息,awk完美解决. 一.正则表达式 正则表达式是组成"样式"的基本语法,而"样式"是运用sed和awk必备的能力.sed和awk相同的运行方式是:只要符合"样式"的数据行,就对它执行指定的"操作"