300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 打开高效文本编辑之门_Linux Sed模拟常见文件命令

打开高效文本编辑之门_Linux Sed模拟常见文件命令

时间:2020-04-27 04:23:50

相关推荐

打开高效文本编辑之门_Linux Sed模拟常见文件命令

Linux sed 实现grep cat wc tail命令的效果对比案例

声明与简介

sed:Stream Editor文本流编辑器,sed是一个“非交互式的”面向字符流的编辑器。本文以案例来介绍如何使用sed来达到其它linux文件命令的效果,或者说如何用sed来模拟其它命令。众所周知在linux环境下,我们会接触很多文件处理的命令,如grep、cat、head、tail、wc等,那么功能强大的文件流编辑器sed能否实现这些功能呢?阅读下文,逐个给大家来揭晓。

: 1 至少有一台linux环境,当前验证环境是Centos 8。

2 了解常见的linux脚本的写法,能认识或者常用单词的缩写。

3 本文会根据实际实践更新和修正,欢迎批评、指导

数据说明

如下是使用的示例文本数据,这里的行号是为了方便解释结果,不是文本内容。

1 7369,smith,clerk,7902,'1980-12-17',800,null,202 7499,allen,salesman,7698,'1981-2-20',1600,300,303 7521,ward,salesman,7698,'1981-2-22',1250,500,304 7566,jones,manager,7839,'1981-4-2',2975,null,205 7654,martin,salesman,7698,'1981-9-28',1250,1400,306 7655,jack,manager,7698,'1987-3-28',1600,1800,107 7656,tim,clerk,7902,'1982-12-12',1400,1400,308 7657,kate,clerk,7902,'1989-11-11',1400,1800,109 7698,blake,manager,7839,'1981-5-1',2850,null,3010 7699,dlake,salesman,7839,'1983-6-15',3000,null,1011 7782,clark,manager,7839,'1981-1-9',2450,null,1012 7788,scott,analyst,7566,'1982-12-9,3000,null, 7839,king,president,null,'1981-11-17',5000,null,1014 7844,turner,salesman,7698,'1981-12-8',1500,0,3015 7876,adams,clerk,7788,'1983-1-12',1100,null, 7900,james,clerk,7698,'1981-12-3',950,null,301718 --7902,ford,analyst,7566,'1981-12-3',3000,null,20 7934,miller,clerk,7782,'1982-1-23',1300,null,10

cat命令

Linux的cat命令是对文件的读取,即可以查看文件的内容。这里sed可以通过p命令,结合-n来查看内容。

读取文本内容

# 查看文本emp.txt的内容。sed -n 'p' emp.txt# cat命令查看文件所有内容cat emp.txt# 结果(部分数据)7369,smith,clerk,7902,'1980-12-17',800,null,207499,allen,salesman,7698,'1981-2-20',1600,300,307521,ward,salesman,7698,'1981-2-22',1250,500,307566,jones,manager,7839,'1981-4-2',2975,null,20

grep命令

Linux的grep命令是对文件的关键字匹配,即可以通过特定的关键字来匹配到指定的行。这里sed可以通过p命令”/、/”结合-n或者通过s命令匹配达到同样的效果。

关键字匹配

# 1 匹配emp.txt里含scott的行的内容。grep scott emp.txt#结果7788,scott,analyst,7566,'1982-12-9',3000,null,20# way1 通过p直接匹配关键字scottsed -n '/scott/p' emp.txt# 结果7788,scott,analyst,7566,'1982-12-9',3000,null,20# way2 通过p、s、$方式匹配关键字scottsed -n 's/scott/$/p' emp.txt# 结果7788,$,analyst,7566,'1982-12-9',3000,null,20#注:S这种方式需要加上$,意思为匹配到每行的结束。

反向关键字匹配

# 2匹配emp.txt里不含scott的行的内容。。grep -v scott emp.txt# 在sed里仅需要在正向匹配时的p命令前加个!(反向的意思)。sed -n '/scott/!p' emp.txt

head命令

Linux的haed命令是对文件的排名靠前的行进行匹配,即可以通过指定行号N来查看前N行的内容。这里sed可以通过p命令首尾行号或者通过q命令或者d命令达到同样的效果。

显示文件前面N行

# 1只显示文件的前4行,通过head加行号4来达到目的。head -4 emp.txt# Sed方式实现可p(打印)、q(退出)、d(删除)命令来实现同样的效果# Way1 通过结合p结合行首、尾来实现该效果。sed -n '1,4 p' emp.txt# 执行结果7369,smith,clerk,7902,'1980-12-17',800,null,207499,allen,salesman,7698,'1981-2-20',1600,300,307521,ward,salesman,7698,'1981-2-22',1250,500,307566,jones,manager,7839,'1981-4-2',2975,null,20# Way2 通过结合q结合行号来实现。sed '4 q' emp.txt# Way3 通过行号结合d来实现sed '5,$ d' emp.txt#注: 这里的行号是要保留的行加1,因为删除是从要保留的行的下一行开始。

tail命令

Linux的tail命令是对文件的排名靠后的行进行匹配,即可以通过指定行号N来从查看后N行的内容。这里sed可以通过p命令首尾行号或者通过q命令或者d命令达到同样的效果。

显示文件后面N行

# 通过tail命令,这里指定行数为5tail -5 emp.txt# Way1 sed通过p结合行范围,这里起始位置为总行数-要保留的行数+1,即20-5+1=16。sed -n '16,$ p' emp.txt7900,james,clerk,7698,'1981-12-3',950,null,30--7902,ford,analyst,7566,'1981-12-3',3000,null,207934,miller,clerk,7782,'1982-1-23',1300,null,10# Way 2 同理,我们也可以通过d命令实现类似的效果,注意这里的末尾是总行号-要保留的行号。即20-5=15。sed '1,15 d' emp.txt

wc命令

wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

显示文件总行数

# 提供wc命令查看文件行号wc -l emp.txt#结果20 emp.txt#不想显示文件名则通过cat文件再结合管道来实现cat emp.txt | wc –l#结果20#sed命令结合=、$也能达到查看文件总行号的效果sed -n '$ =' emp.txt# 结果20

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。