资讯专栏INFORMATION COLUMN

Linux_《Linux命令行与shell脚本编程大全》第十九章学习总结

justjavac / 1623人阅读

摘要:命令行与脚本编程大全第三版第十九章学习总结第十九章初识和本章内容学习编辑器编辑器入门编辑器基础文本处理编辑器编辑器被称作流编辑器,和普通的交互式文本编辑器恰好相反。编辑器可以根据命令来处理数据流中的数据。

时间:2017年12月07日星期四
说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十九章学习总结

第十九章:初识sed和gawk

本章内容

学习sed编辑器

gawk编辑器入门

sed编辑器基础

19.1 文本处理 19.1.1 sed编辑器

sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。sed编辑器可以根据命令来处理数据流中的数据。

sed编辑器会执行下列操作

一次从输入中读取一行数据

根据所提供的编辑器命令匹配数据

按照命令修改流中的数据

将新的数据输出到STDOUT

在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复以上过程,直到处理完所有数据行。

sed命令格式

sed options script file

使用选项修改sed命令的行为,sed命令选项如下

-e script:在处理输入时,将script中指定的命令添加到已有的命令中

-f file:在处理输入时,将file中指定的命令添加到已有的命令中

-n:不产生命令输出,使用print命令来完成输出

1.在命令行定义编辑器命令

默认情况下,sed编辑器会将指定的命令应用到STDIN输入流上,可以直接将数据通过管道输入sed编辑器进行处理。

简单示例

echo "This is a test" | sed "s/test/big test/"

在该例子中使用了sed编辑器的s命令。s命令会用斜线间指定的第二个文本字符串来替换第一个文本字符串。这个例子中是big test替换了test

对文件进行处理

编写data1.txt文件

The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.

执行命令

sed "s/dog/cat/" data1.txt

sed编辑器并不会修改文本文件的数据

2.在命令行使用多个编辑器命令

在sed命令上使用-e选项实现执行多个命令

sed -e "s/brown/green/;s/dog/cat/" data1.txt

3.从文件中读取编辑器命令

编写script1.sed文件

s/brown/green/
s/fox/elephant/
s/dog/cat/

执行命令

sed -f script1.sed data1.txt

敲门:为了避免把sed编辑器脚本文件与bash shell脚本文件搞混,可以使用.sed作为sed脚本文件的扩展名

19.1.2 gakw程序

gawk程序是Unix中的原始awk程序GNU版本,使用gawk程序可以实现

定义变量来保存数据

使用算术和字符串操作符来处理数据

使用结构化编程概念来为数据处理增加处理逻辑

通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告

1.gawk命令格式

命令格式

gawk options program file

gawk可用的options选项

选项:描述

-F fs:指定行中划分数据字段的字段分隔符

-f file:从指定的文件中读取程序

-v var=value:定义gawk程序中的一个变量及其默认值

-mf N:指定要处理的数据文件中的最大字段树

-mr N:指定数据文件中的最大数据行树

-W keyword:指定gawk的兼容模式或警告等级

2.从命令行读取程序脚本

一个简单的gawk程序脚本

gawk "{print "Hello World!"}"

运行该命令后,会一直等待STDIN输入的文本。而不管在数据流中输入什么文本,都会输出同样的文本,可以使用Ctrl+D终止程序

3.使用数据字段变量

gawk的主要特性之一是其处理文本文件中数据的能力,它会自动给一行中的每个数据元素分配一个变量。默认情况下,它会如下分配

$0代表整个文本行

$1代表文本行中的第1个数据字段

$2代表文本行中的第2个数据字段

$n代表文本行中的第n个数据字段

gawk在读取一行文本时,会使用默认的字段分隔符(空白字符:空格或制表符)来划分每个数据字段

编写data2.txt文件

One line of test text.
Two lines of test text.
Three lines of test text.

执行命令

gawk "{print $1}" data2.txt

则只显示第1个数据字段的值

可以使用-F选项指定字段分隔符

执行命令

gawk -F: "{print $1}" /etc/passwd

4.在程序脚本中使用多个命令

只要在命令之间放个分好即可

实例

echo "My name is zc" | gawk "{$4="test";print $0}"

5.从文件中读取程序

编写script2.gawk文件

{print $1 ""s home directory is " $6}

执行命令

gawk -F: -f script2.gawk /etc/passwd

或使用以下方式

编写script3.gawk文件

{
text = ""s home directory is "
print $1 text $6
}

执行命令

gawk -F: -f script3.gawk /etc/passwd

6.在处理数据前运行脚本

使用BEHIN关键字强制gawk在读取数据前执行指定的程序脚本

gawk "BEGIN {print "Hello World!"}"

编写data3.txt文件

Line 1
Line 2
Line 3

执行命令

gawk "BEGIN {print "The data3 File Contents:"} {print $0}" data3.txt

7.在处理数据后运行脚本

使用END关键字gawk在读完数据后执行程序脚本

gawk "BEGIN {print "The data3 File Contents:"} {print $0} END {print "End of File"}" data3.txt

编写script4.gawk文件

BEGIN {
print "The latest list of users and shells"
print " UserID 	 Shell"
print "------- 	 -------"
FS=":"
}

{
print $1 " 	 " $7
}

END {
print "This concludes the listing"
}

执行命令

gawk -f script4.gawk /etc/passwd
19.2 sed编辑器基础 19.2.1 更多的替换选项

1.替换标记

使用s命令默认只会替换每行中第一处出现的地方,如果需要替换所有出现的地方,则需要使用替换标记

可用的替换标记

数字:表明新文本将替换第几处模式匹配的地方

g:表明新文本将会替换所有匹配的文本

p:表明原先行的内容要打印出来

w file:将替换的结果写到文件中

编写data4.txt文件

This is a test of the test script.
This is the second test of the test script.

执行命令

sed "s/test/trial/2" data4.txt
sed "s/test/trial/g" data4.txt

编写data5.txt文件

This is a test line.
This is a different line.

执行命令

sed -n "s/test/trial/p" data5.txt
sed "s/test/trial/w test.txt" data5.txt
cat test.txt

2.替换字符

执行命令

sed "s!/bin/bash!/bin/csh!" /etc/passwd
19.2.2 使用地址

sed编辑器默认会将使用的命令作用于文本数据的所有行,使用行寻址,可以指定作用于特定行或某些行

行寻址的两种形式

以数字形式表示行区间

用文本模式来过滤出行

两种形式的命令格式相同

[address]command

也可以将特定地址的多个命令分组

address {
    command1
    command2
    command3
}

1.数字方式的行寻址

执行命令

sed "2s/dog/cat/" data1.txt
sed "2,3s/dog/cat/" data1.txt
sed "2,$s/dog/cat/" data1.txt

2.使用文本模式过滤器

格式

/pattern/command

执行命令

sed "/zc/s/bash/csh/" /etc/passwd

pattern可以是固定文本,也可以是正则表达式

3.命令组合

执行命令

sed "2{s/fox/elephant/;s/dog/cat/}" data1.txt
sed "3,${s/brown/green/;s/lazy/active/}" data1.txt
19.2.3 删除行

执行命令

sed "d" data1.txt
sed "3d" data1.txt
sed "2,3d" data1.txt
sed "3,$d" data1.txt
19.2.4 插入和附加功能

插入或附加数据

插入(insert)命令(i)会在指定行前增加一个新行

附加(append)命令(a)会在指定行后增加一个新行

执行命令

echo "Test line 2" | sed "iTest line 1"
echo "Test line 2" | sed "aTest line 1"
19.2.5 修改行

使用change命令修改数据流中整行文本的内容

编写data6.txt文件

This is line number 1.
This is line number 2.
This is line number 3.
This is line number 4.

执行命令

sed "3cThis is a changed line." data6.txt 
sed "2,3cThis is a changed line." data6.txt
19.2.6 转回命令

命令格式

[address]y/inchars/outchars

执行命令

sed "y/123/789/" data6.txt
19.2.7 回顾打印

1.打印行

使用命令p打印文本行

执行命令

echo "this is a test" | sed "p"
sed -n "/number 3/p" data6.txt

2.打印行号

使用等号=打印行号

执行命令

sed "=" data1.txt

3.列出行

使用小写的L列出行

执行命令

sed -n "l" data1.txt
19.2.8 使用sed处理文件

1.写入文件

命令格式

[address]w filename

执行命令

sed "1,2w test.txt" data6.txt

2.从文件读取数据

使用命令r从文件中读取数据

[address]r filename

执行命令

sed "3r data1.txt" data6.txt
19.3 小结

本章主要讲解了使用sed编辑器来处理数据,及sed编辑器的一些处理数据的编辑命令

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33385.html

相关文章

  • Linux_Linux命令行与shell脚本编程大全》第九章学习总结

    摘要:命令行与脚本编程大全第三版第九章学习总结第九章安装软件程序本章内容安装软件使用包使用包包管理基础各种主流发行版都采用了某种形式的包管理系统,来控制软件和库的安装。工具及相关命令在不同的发行版上有很大的不同。本章介绍了命令。 时间:2017年08月17日星期四 说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本...

    ideaa 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全第十四章学习总结

    摘要:命令行与脚本编程大全第三版第十四章学习总结第十四章处理用户输入本章内容传递参数跟踪参数移动变量处理选项将选项标准化获取用户输入命令行参数读取参数会将一些称为位置参数的特殊变量分配给输入到命令行中的所有参数。 时间:2017年09月19日星期二说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版...

    王晗 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全第十三章学习总结

    摘要:命令行与脚本编程大全第三版第十三章学习总结第十三章更多的结构化命令本章内容循环语句迭代语句使用语句循环重定向循环的输出命令命令格式命令说明变量为中的迭代值,在和语句之间输入的命令可以是一条或多条标准的命令。 时间:2017年09月13日星期三说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版...

    Forest10 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全第十一章学习总结

    摘要:命令允许你在脚本结束时指定一个退出状态码编写脚本编写脚本编写脚本当指定的退出状态码超过时,最终的结果是指定的数值除以后得到的余数。 时间:2017年08月28日星期一说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十一章学习总结 第十一章:构建基本脚本 本章内容 使用多个命令 创建脚本...

    hizengzeng 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全第十七章学习总结

    摘要:例如,函数名会在变量中定义,函数命令行上的任何参数都会通过等定义。在开源世界中,共享代码才是关键,而这一点同样适用于脚本函数。这里将说明如何下载安装使用脚本函数库。 时间:2017年10月09日星期一说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十七章学习总结 第十七章:创建函数 本...

    cgh1999520 评论0 收藏1

发表评论

0条评论

最新活动
阅读需要支付1元查看
<