linux笔记(28)sed和awk的联系及拓展

sed练习题

把/etc/passwd 复制到/root/test.txt,用sed打印所有行

[[email protected] sed]# sed -n '1,$p' passwd

打印test.txt的3到10行

[[email protected] sed]# sed -n '3,10'p passwd

打印test.txt 中包含 ‘root’ 的行

[[email protected] sed]# sed -n '/root/'p passwd

删除test.txt 的15行以及以后所有行

[[email protected] sed]# sed '15,$'d passwd

删除test.txt中包含 ‘bash’ 的行

[[email protected] sed]# sed '/bash/'d passwd

替换test.txt 中 ‘root’ 为 ‘toor’

[[email protected] sed]# sed 's/root/toor/g' passwd

替换test.txt中 ‘/sbin/nologin’ 为 ‘/bin/login’

[[email protected] sed]# sed 's#sbin/nologin#bin/login#g' passwd

删除test.txt中5到10行中所有的数字

[[email protected] sed]# sed '5,10s/[0-9]//g' passwd

删除test.txt 中所有特殊字符(除了数字以及大小写字母)

[[email protected] sed]# sed 's/[^a-zA-Z0-9]//g' passwd

把test.txt中第一个单词和最后一个单词调换位置

[email protected] sed]# sed 's/\(^[a-zA-Z][a-zA-Z]*\)\([^a-zA-Z].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)/\4\2\3\1/' passwd bash:x:0:0:root:/root:/bin/root-zA-Z]*$\)/\4\2\3\1/' passwd

把test.txt中出现的第一个数字和最后一个单词替换位置

[[email protected] sed]#  sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)#\1\5\3\4\2#' passwd

把test.txt 中第一个数字移动到行末尾

[[email protected] sed]#  sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*$\)#\1\3\2#' passwd

在test.txt 20行到末行最前面加 ‘aaa:’

[[email protected] sed]# sed '20,$s/^.*$/aaa:&/' passwd

sed拓展

  1. 如何截取文件中特定的某到某行

[[email protected] sed]# cat test.txt

ert

fff

**

[abcfd]

123

324

444

[rty]

**

fgfgf

如何截取[abcfd]到[rty]这一段呢?

答案:[[email protected] sed]# sed -n '/\[abcfd\]/,/\[rty\]/p' test.txt

2.sed如何转换大小写字母

(1)把所有的小写变大写

[[email protected] sed]# sed 's/[a-z]/\u&/g' test.txt

(2)把所有的大写变小写

[[email protected] sed]# sed 's/[a-z]/\l&/g' test.txt

(3)把每个单词的第一个小写字母变大写

[[email protected] sed]# sed 's/\b[a-z]/\u&/g' test.txt

3.sed在文件某一行最后一个数字

[[email protected] sed]# cat test.txt

ert

fff

**

[abcfd]

123

324

444

[rty]

**

fgfgf

[[email protected] sed]# sed 's/\(^[0-9].*\)/\1 12/' test.txt

4.如何使用sed打印1到100行包含某个字符串的行

[[email protected] sed]# cat test.txt

ert

fff

**

[abcfd]

123

324

444

[rty]

**

fgfgf

答案:[[email protected] sed]# sed -n '1,100{/fd/p}' test.txt

fff

[abcfd]

fgfgf

支持多字符:

[[email protected] sed]# sed -n '1,100{/ert/p;/1./p}' test.txt

ert

123

5.sed删除某关键字的下一行到最后一行

awk练习题

用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)

[[email protected] sed]# awk '{print $0}' passwd

查找所有包含 ‘bash’ 的行

[[email protected] sed]# awk '/bash/' passwd

用 ‘:’ 作为分隔符,查找第三段等于0的行

[[email protected] sed]# awk -F ':' '$3==0' passwd

用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)

[[email protected] sed]# awk -F ':' '$1==root' |sed 's/root/toor/g' passwd

用 ‘:’ 作为分隔符,打印最后一段

[[email protected] sed]# awk -F ':' '{print $NF}' passwd

打印行数大于20的所有行

[[email protected] sed]# awk  'NR>20' passwd

用 ‘:’ 作为分隔符,打印所有第三段小于第四段的行

[[email protected] sed]# awk -F ':' '$3<$4' passwd

用 ‘:’ 作为分隔符,打印第一段以及最后一段,并且中间用 ‘@’ 连接 (例如,第一行应该是这样的形式 '[email protected]/bin/bash‘ )

[[email protected] sed]# awk -F ':'  {'print $1"@"$NF}' passwd

用 ‘:’ 作为分隔符,把整个文档的第四段相加,求和

[[email protected] sed]# awk -F ':' '{(tot=tot+$4)}; END {print tot}' passwd

把/etc/passwd 复制到/root/test.txt,用sed打印所有行

[[email protected] sed]# sed -n '1,$p' passwd

打印test.txt的3到10行

[[email protected] sed]# sed -n '3,10'p passwd

打印test.txt 中包含 ‘root’ 的行

[[email protected] sed]# sed -n '/root/'p passwd

删除test.txt 的15行以及以后所有行

[[email protected] sed]# sed '15,$'d passwd

删除test.txt中包含 ‘bash’ 的行

[[email protected] sed]# sed '/bash/'d passwd

替换test.txt 中 ‘root’ 为 ‘toor’

[[email protected] sed]# sed 's/root/toor/g' passwd

替换test.txt中 ‘/sbin/nologin’ 为 ‘/bin/login’

[[email protected] sed]# sed 's#sbin/nologin#bin/login#g' passwd

删除test.txt中5到10行中所有的数字

[[email protected] sed]# sed '5,10s/[0-9]//g' passwd

删除test.txt 中所有特殊字符(除了数字以及大小写字母)

[[email protected] sed]# sed 's/[^a-zA-Z0-9]//g' passwd

把test.txt中第一个单词和最后一个单词调换位置

[email protected] sed]# sed 's/\(^[a-zA-Z][a-zA-Z]*\)\([^a-zA-Z].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)/\4\2\3\1/' passwd bash:x:0:0:root:/root:/bin/root-zA-Z]*$\)/\4\2\3\1/' passwd

把test.txt中出现的第一个数字和最后一个单词替换位置

[[email protected] sed]#  sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*\)\([^a-zA-Z]\)\([a-zA-Z][a-zA-Z]*$\)#\1\5\3\4\2#' passwd

把test.txt 中第一个数字移动到行末尾

[[email protected] sed]#  sed 's#\([^0-9][^0-9]*\)\([0-9][0-9]*\)\([^0-9].*$\)#\1\3\2#' passwd

在test.txt 20行到末行最前面加 ‘aaa:’

[[email protected] sed]# sed '20,$s/^.*$/aaa:&/' passwd

用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)

[[email protected] sed]# awk '{print $0}' passwd

查找所有包含 ‘bash’ 的行

[[email protected] sed]# awk '/bash/' passwd

用 ‘:’ 作为分隔符,查找第三段等于0的行

[[email protected] sed]# awk -F ':' '$3==0' passwd

用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)

[[email protected] sed]# awk -F ':' '$1==root' |sed 's/root/toor/g' passwd

用 ‘:’ 作为分隔符,打印最后一段

[[email protected] sed]# awk -F ':' '{print $NF}' passwd

打印行数大于20的所有行

[[email protected] sed]# awk  'NR>20' passwd

用 ‘:’ 作为分隔符,打印所有第三段小于第四段的行

[[email protected] sed]# awk -F ':' '$3<$4' passwd

用 ‘:’ 作为分隔符,打印第一段以及最后一段,并且中间用 ‘@’ 连接 (例如,第一行应该是这样的形式 '[email protected]/bin/bash‘ )

[[email protected] sed]# awk -F ':'  {'print $1"@"$NF}' passwd

用 ‘:’ 作为分隔符,把整个文档的第四段相加,求和

[[email protected] sed]# awk -F ':' '{(tot=tot+$4)}; END {print tot}' passwd

awk拓展

  1. awk中gsub函数的使用

awk 'gsub(/www/,"abc")' /etc/passwd                                    // passwd文件中把所有www替换为abc

2.把文件中相同的行合并成一行

paste  filename1  filename2

cat  a.txt
1 2 3 
4 5 6 
a b c

cat b.txt
3 2 1 
6 5 4 
c b a

则  paste  a.txt  b.txt  结果为
1 2 3   3 2 1
4 5 6   6 5 4
a b c   c b a

如果,你想在两个文件连接处用一个指定的字符连接,还可以用-d来指定
paste -d '+'  a.txt b.txt
结果为
1 2 3+3 2 1
4 5 6+6 5 4
a b c+c b a

awk更详细的用法:http://www.cnblogs.com/emanlee/p/3327576.html

时间: 2024-07-29 04:45:06

linux笔记(28)sed和awk的联系及拓展的相关文章

linux学习:sed与awk与tr用法整理

流编辑器:sedsed 's/pattern/replace_string/' file #从给定文本中的字符串利用正则表达式进行匹配并替换每一行中第一次符合样式的内容sed 's/text/replace/' file > newfile #替换每一行中第一次符合样式的内容并将替换结果重定向到新文件sed -i 's/test/replace/' file #参数-i使用替换每一行中第一次符合样式的内容结果应用于源文件sed 's/pattern/replace_string/g' file

linux笔记2-8 ldap网络服务

****************ldap网络服务*******************1.ldap是什么ladap目录服务认证,和windows活动目录相似,就是记录数据的一种方式 2.ladap客户端所须软件sssd         //该服务可以用来访问多种验证服务器,如LDAP,Kerberos等,               并提供授权.是介于本地用户和数据存储之间的进程,客户端               首先连接sssd,再由sssd联系外部资源提供者.krb5-workstatio

Sed&amp;awk笔记之sed篇(转)

Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" stream-oriented editor. It is stream-oriented because, like many UNIXprograms, input flows through the program and is directed to standard output. Sed本质上是一个编辑器,

Sed&amp;awk笔记之sed篇

http://blog.csdn.net/a81895898/article/details/8482387 Sed是什么 <sed and awk>一书中(1.2 A Stream Editor)是这样解释的: Sed is a "non-interactive" stream-oriented editor. It is stream-oriented because, like many UNIXprograms, input flows through the pr

linux shell必知必会sed、awk

sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等.以下介绍的是Gnu版本的Sed 3.02.   2. 定址   可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔

Linux文本三剑客超详细教程---grep、sed、awk

awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理. 1.grep 1.1 什么是grep和egrep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(匹配到的标红).grep全称是Global

Linux 常用命令sed/awk/grep及正则表达式

linux命令sed和awk sed 主要功能 sed,stream editor.是一个"非交互式"字符流编辑器.输入流通过程序并输出到标准输出端. sed主要用来自动编辑一个或者多个文件(替换,插入,删除,追加,更改) 常见应用 抽区域 匹配正则表达式 比较域 增加,附加,替换 执行过程 sed一次处理一行或多行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区

linux(5)--补充(管道| / 重定向&gt; / 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中,如

Linux Shell之十 sed与awk

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