Linux命令shell脚本编程学习笔记-18章初识sed和gawk

原创 2016年08月29日 19:51:27

第18章 初识sed和gawk

18.1 文本处理

sed编辑器
sed编辑器可以基于输入到命令行的或是存储在命令文本文件中的命令来处理数据流中的数据。
它每次读取一行,用提供的编辑器命令匹配数据、按命令中指定的方式修改流中的数据,然后将生成的数据输出到STDOUT。在流编辑器将所有命令与一行数据进行匹配后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的所有数据行后,它就会终止。
sed命令格式:
sed options script file
sed命令选项
-e script 在处理输入时,将script中指定的命令添加到运行的命令中
-f file 在处理输入时,将file中指定的命令添加到运行的命令中
-n 不要为每个命令生成输出,等待print命令来输出

#替换
$echo "this is a test" | sed 's/test/big test/'
this is a big test

在命令行使用多个编辑器命令
使用-e即可。
注意:多个命令都写在同一对引号之间,并用分号隔开。并且在命令末尾和分号之间不能有空格。

sed -e 's/brown/green/';s/dog/cat/ data1

从文件中读取编辑器命令
如果有大量要处理的sed命令,可以将这些命令放入一个文件中,用-f指定文件
sed -f script data1

gawk程序
gawk程序是Unix中的原始awk程序的GNU版本,它提供了一种编程语言不只是编辑器命令。
在gawk编程语言中,可以做下面的事:
1.定义变量来保存数据
2.使用算数和字符串操作符来处理数据
3.使用结构化编程概念,比如if-then语句和循环
4.提取数据文件中的数据元素并将他们按另一顺序或格式重新放置。

gawk option program file
gawk选项
选项 描述
-F fs 指定行中分隔数据字段的字段分隔符
-f file 指定读取程序的文件名
-v var=value 定义gawk程序中的一个变量以及默认值
-mf N 指定要处理的数据文件中的最大字段数
-mr N 指定数据文件中的最大数据行数
-W keyword 指定gawk的兼容模式或警告等级

18.2 sed编辑器基础
默认情况下,对匹配的内容只会替换一次。如果想要改变这种方式,需要使用替换标识。一共有4中替换标识
s/pattern/replacement/flags
(1)数字,表明将替换第几处模式匹配的地方
s/pattern/replacement/number
(2)g,替换所有在文本中出现过的地方
s/pattern/replacement/g
(3)p,表示原来行的内容要打印出来
s/pattern/replacement/p
(4)w file,将替换的结果写到文件中去
s/pattern/replacement/w file

sed -n ‘s/test/trial/p’
这种情况下,会输出被改变过的行的内容

替换字符
转义符

使用地址
默认情况下,sed会对所有行使用命令,如果只想将命令作用于特定某些行,需要使用行寻址(line addressing)
sed中有两种形式的行寻址:
1.行的数字范围
2.用文本模式来过滤出某行
两种形式都使用相同的格式来指定地址:
[address] command
也可以为特定地址将多个命令放在一起:
address {
command1
command2
command3
}

数字方式的行寻址
sed ‘2s/dog/cat/’ data1
只修改第二行匹配的
sed ‘2,5s/dog/cat/’ data1
只修改第二行到第五行匹配的
sed ‘2,$s/dog/cat/’ data1
修改第二行到最后一行匹配的

使用文本模式过滤器
/pattern/command
该命令只会作用到匹配文本模式的行上。sed在文本模式中采用正则表达式。

组合命令
需要对单行执行多条命令的话,可以使用花括号将多条命令组合在一起
$ sed ‘2{
s/This/That/
s/test/good test/
}’ test.txt

删除行(delete)
删除行的命令为d,如果不指定行号,那么就全部删除。
sed ‘3d’data1
删除第三行
sed ‘4,7d’ data1
删除4-7行

插入和附加文本
插入(insert)命令i会在指定行前加一个新行
追加(append)命令a会在指定行后加一个新行
sed ‘[address]command\
new line’

echo “Test line 2” |sed ‘i\Test line 1’
Test line 1
Test line2

echo “Test line 2” |sed ‘a\Test line 1’
Test line2
Test line 1

修改行(change)
和之前的使用完全一样
使用地址区间的时候需要注意,sed会把区间中的所有内容作为一个整体用新行替换
sed ‘3c\
this is a change line of text’ data1
将第三行替换成this is a change line of text

转换命令
转换(transform,y)命令是唯一可用来处理单个字符的sed编辑器命令
格式如下:
[addressly/inchars/outchars/
转换命令会对inchars和outchars按顺序做一个一一映射。
如果inchars和outchars长度不同,sed则会产生错误信息

sed ‘y/123/789’ data1
对应数字进行替换

回顾打印
用来打印数据流中的信息的命令:
1.p,用来打印文本行
2.等号(=)命令,用来打印行号
3.l(小写L)命令,用来列出行
打印行
和替换命令中的p标记类似,p命令可以打印sed编辑器输出中的一行

sed -n ‘/3/{p;s/line/Line/p}’ test.txt

打印行号
sed ‘=’ data1

列出行
此命令允许打印数据流中的文本和不可打印的ASCII字符。
任何不可打印字符都用他们的八进制值前加一个反斜线或标准C风格的命名法。

cat data1
this line contains tabs.
sed -n ‘l’data1
this\tline\tcontains\ttabs.$

用sed和文件一起工作

向文件写入
[address]w filename

sed ‘1,2w test’ data1
将data1中第一行和第二行写入到文件test中

从文件读取数据
[address]r filename
读取命令允许将一个独立文件中的数据插入到数据流中。
sed ‘3r data2’data1
将data2中的文件读取插入到data1第3行的末尾

版权声明:本文为博主原创文章,未经博主允许不得转载。

初识sed和gawk

sed编辑器 又被称作:流编辑器(stream editor),即 基于预先提供的一组规则来编辑数据流。 sed命令的格式如下: sed options script file opti...
  • moli152_
  • moli152_
  • 2017年10月28日 21:11
  • 35

SHELL sed和gawk

sed编辑器 sed成为流编辑器,跟普通交互式编辑器恰好相反,即在处理文本流之前已经定义好规则。它可以基于命令行或文本处理,它每次从输入中读取一行,用提供的编辑器命令匹配数据,按命令中指定的方式修改...
  • u012627927
  • u012627927
  • 2015年05月03日 21:35
  • 376

Linux学习-高级shell脚本编程(二)初识sed和gawk

有的时候,我们需要自动处理文本文件中的文本,而不需要拉出全副武装的交互式文本编辑器。这种情况下,有个能够自动地格式化、插入、修改或删除文本元素的命令行编辑器就方便多了。 Linux系统提供了两个编辑...
  • Dream_angel_Z
  • Dream_angel_Z
  • 2015年05月23日 15:27
  • 1460

第7章 sed、gawk介绍与正则表达式-----------(扩展的正则表达式)

7.6 扩展的正则表达式          POSIXERE模式包括某些Linux应用程序和工作使用的其他符号。gawk程序能够识别ERE模式,但是sed编辑器。sed编辑器和gawk程序的正则表达...
  • henni_719
  • henni_719
  • 2017年01月09日 11:02
  • 652

Linux文本处理—awk gawk命令的使用

AWK 是一种文本处理和模式匹配语言,所以它通常称为数据驱动的 语言,程序语句描述需要进行匹配和处理的输入数据,而不是程序操作步骤的序列,在许多语言中都是这样的。AWK 程序在其输入数据中搜索包含模式...
  • yming0221
  • yming0221
  • 2013年09月27日 23:06
  • 3065

Shell脚本高级编程 一 初识sed和gawk

到目前为止,shell脚本最常见的一个用途是处理文本文件。可以检查日志文件、可以读取配置文件以及处理数据元素,还可以帮助自动化处理文本文件中各种类型数据。但只用shell脚本命令处理文本文件内容有点勉...
  • u014656992
  • u014656992
  • 2017年05月17日 15:30
  • 325

Linux命令行与Shell脚本编程大全

  • l19901072010
  • l19901072010
  • 2016年11月19日 03:33
  • 441

Mac OS X安装gnu-sed等命令行工具

由于Mac OS X自带的sed等命令行工具是基于BSD的,有一些缺陷和不足,比如sed不支持\t来表示TAB,在使用时非常不方便,因此考虑安装gnu命令行工具来替代Mac自带的这些常用工具。方法主要...
  • xicikkk
  • xicikkk
  • 2016年09月17日 00:13
  • 2600

sed && awk工具 及一些常用的shell脚本

(一)sed sed是一个精简的、非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名,然后在屏幕上查看输出。 逐行读取文件内容存储在临时缓冲区中,称为“模式空间”(pattern spac...
  • NK_test
  • NK_test
  • 2016年03月21日 23:16
  • 3440

每天一个Linux命令-18(sed)

linux sed命令详解 简介 sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中...
  • splenday
  • splenday
  • 2015年08月15日 23:43
  • 712
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux命令shell脚本编程学习笔记-18章初识sed和gawk
举报原因:
原因补充:

(最多只允许输入30个字)