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

简介:

sed练习题

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

[root@localhost sed]# sed -n '1,$p' passwd


打印test.txt的3到10行

[root@localhost sed]# sed -n '3,10'p passwd 


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

[root@localhost sed]# sed -n '/root/'p passwd 


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

[root@localhost sed]# sed '15,$'d passwd


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

[root@localhost sed]# sed '/bash/'d passwd 


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

[root@localhost sed]# sed 's/root/toor/g' passwd


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

[root@localhost sed]# sed 's#sbin/nologin#bin/login#g' passwd 


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

[root@localhost sed]# sed '5,10s/[0-9]//g' passwd 


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

[root@localhost sed]# sed 's/[^a-zA-Z0-9]//g' passwd 


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

root@localhost 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中出现的第一个数字和最后一个单词替换位置

[root@localhost 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 中第一个数字移动到行末尾

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


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

[root@localhost sed]# sed '20,$s/^.*$/aaa:&/' passwd 


sed拓展

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

[root@localhost sed]# cat test.txt 

ert

fff

**

[abcfd]

123

324

444

[rty]

**

fgfgf

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

答案:[root@localhost sed]# sed -n '/\[abcfd\]/,/\[rty\]/p' test.txt


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

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

[root@localhost sed]# sed 's/[a-z]/\u&/g' test.txt 

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

[root@localhost sed]# sed 's/[a-z]/\l&/g' test.txt

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

[root@localhost sed]# sed 's/\b[a-z]/\u&/g' test.txt  


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

[root@localhost sed]# cat test.txt 

ert

fff

**

[abcfd]

123

324

444

[rty]

**

fgfgf

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


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

[root@localhost sed]# cat test.txt 

ert

fff

**

[abcfd]

123

324

444

[rty]

**

fgfgf

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

fff

[abcfd]

fgfgf

支持多字符:

[root@localhost sed]# sed -n '1,100{/ert/p;/1./p}' test.txt 

ert

123


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


awk练习题

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

[root@localhost sed]# awk '{print $0}' passwd 


查找所有包含 ‘bash’ 的行

[root@localhost sed]# awk '/bash/' passwd


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

[root@localhost sed]# awk -F ':' '$3==0' passwd


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

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


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

[root@localhost sed]# awk -F ':' '{print $NF}' passwd 


打印行数大于20的所有行

[root@localhost sed]# awk  'NR>20' passwd


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

[root@localhost sed]# awk -F ':' '$3<$4' passwd


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

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


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

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


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

[root@localhost sed]# sed -n '1,$p' passwd


打印test.txt的3到10行

[root@localhost sed]# sed -n '3,10'p passwd 


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

[root@localhost sed]# sed -n '/root/'p passwd 


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

[root@localhost sed]# sed '15,$'d passwd


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

[root@localhost sed]# sed '/bash/'d passwd 


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

[root@localhost sed]# sed 's/root/toor/g' passwd


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

[root@localhost sed]# sed 's#sbin/nologin#bin/login#g' passwd 


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

[root@localhost sed]# sed '5,10s/[0-9]//g' passwd 


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

[root@localhost sed]# sed 's/[^a-zA-Z0-9]//g' passwd 


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

root@localhost 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中出现的第一个数字和最后一个单词替换位置

[root@localhost 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 中第一个数字移动到行末尾

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


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

[root@localhost sed]# sed '20,$s/^.*$/aaa:&/' passwd 




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

[root@localhost sed]# awk '{print $0}' passwd 


查找所有包含 ‘bash’ 的行

[root@localhost sed]# awk '/bash/' passwd


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

[root@localhost sed]# awk -F ':' '$3==0' passwd


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

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


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

[root@localhost sed]# awk -F ':' '{print $NF}' passwd 


打印行数大于20的所有行

[root@localhost sed]# awk  'NR>20' passwd


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

[root@localhost sed]# awk -F ':' '$3<$4' passwd


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

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


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

[root@localhost 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










本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2044240,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
281 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3月前
|
监控 Linux 数据处理
Linux grep技巧 结合awk查询
结合 `grep` 和 `awk`,可以实现灵活、高效的文本处理和数据分析。`grep` 用于快速过滤符合条件的行,`awk` 用于进一步处理和提取数据。这种组合使用在日志分析、数据处理和系统监控等场景中尤为常见。掌握这两者的基本用法和组合技巧,可以大大提升在 Linux 环境下的工作效率。
73 7
|
7月前
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
5月前
|
Linux Perl
Linux awk命令使用技巧
【10月更文挑战第16天】Linux awk命令使用技巧
112 4
|
5月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
163 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
5月前
|
存储 安全 Linux
Linux文件管理命令md5sum awk
通过结合 `md5sum`和 `awk`,不仅可以高效地进行文件完整性校验,还能灵活地处理和分析校验结果,为系统管理、数据审计等工作提供强大的支持。
152 2
|
6月前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
362 9
Linux文本处理三剑客之sed详解
|
6月前
|
Linux Perl
Linux之sed命令
Linux之sed命令
|
6月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
1033 2
|
6月前
|
Linux Perl
6-20|linux sed命令
6-20|linux sed命令