《Linux Shell脚本攻略》 笔记 第四章:高效文本处理

简介: 《Linux Shell脚本攻略》 笔记第四章:高效文本处理

1、IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

2、grep用法

//在多级目录中对文本进行递归检索

[root@localhost program_test]# grep "yang" ./ -Rn

./test.txt:6:laoyang

./right.txt:1:1 yang man

//忽略大小写匹配

[root@localhost program_test]# echo hello world | grep -i "HELLO"

hello world

//递归搜索所有.c和.cpp文件

[root@localhost program_test]# grep "main()" . -r --include *.{c,cpp}

./hello.c:int main()

sin.c:int main()

hello.cpp:int main()


//匹配某个结果之后的几行

[root@localhost program_test]# echo -e "a\nb\nc\na\nb\nc"| grep a -A 1

a

b

--

a

b


3、cut命令

cut,将文本按照列进行切割的小工具。

//-d分界符; -f要提取的列

[root@localhost program_test]# cut -d ":" -f5 --complement passwd_yang

root:x:0:0:/root:/bin/bash

bin:x:1:1:/bin:/sbin/nologin


[root@localhost program_test]# cut -c1-5 passwd_yang

root:

bin:x

daemo

adm:x


//统计特定文件中的词频

[root@localhost program_test]# cat word_freq.sh

#!/bin/bash


if [ $# -ne 1 ];

then

echo "Usage: $0 filename"

exit -1

fi


filename=$1


egrep -o "\b[[:alpha:]]+\b" $filename | \

awk '{ count[$0]++ } \

END { printf("%-14s%s\n","word","Count");\

for(ind in count) \

{ printf("%-14s%d\n",ind,count[ind]); } }'




4、sed命令(stream editor 流编辑器)

适用文本处理.

//1.替换,从第3个开始替换

[root@localhost program_test]# echo this thisthisthis | sed 's/this/THIS/3g'

this thisTHISTHIS

//2.删掉空白行

[root@localhost program_test]# sed '/^$/d' choice.sh


//3.已匹配的字符串标记&

[root@localhost program_test]# echo this is an example | sed 's/\w\+/[&]/g'

[this] [is] [an] [example]


//4.替换举例.

[root@localhost program_test]# cat sed_data.txt

11 abc 111 this 9 file contains 111 11 88 numbers 0000

[root@localhost program_test]# cat sed_data.txt |  sed 's/\b[0-9]\{3\}\b/NUMBER3/g'

11 abc NUMBER3 this 9 file contains NUMBER3 11 88 numbers 0000


//5.实战举例

获取ntp同步的错误信息(假定当前设备没有联网)

举例一:ntpdate 8.8.8.8

15 Jan 07:28:26 ntpdate[7137]: bind() fails: Permission denied

举例二:ntpdate google.com

[root@localhost cutDemo]# ntpdate msf22.com

Error resolving msf22.com: Name or service not known (-2)

15 Jan 07:30:54 ntpdate[7169]: Can't find host msf22.com: Name or service not known (-2)

15 Jan 07:30:54 ntpdate[7169]: no servers can be used, exiting

想获取[71**]:后的出错信息,之前的删除。脚本如下:

[root@localhost cutDemo]# ntpdate msft22.com 2>&1  | sed 's/.*\]\: //g'

Error resolving msft22.com: Name or service not known (-2)

Can't find host msft22.com: Name or service not known (-2)

no servers can be used, exiting


解释:  ntpdate  msft22.com 2>&1  //2>&1 标准输错重定向到标准输出。

sed 's/.*\]\: //g'  //删除文件中"]:"前面的字符串。



5、awk工具,用于数据流,对列、行进行操作。

//1)、awk的实现方式

[root@localhost program_test]# echo -e "line1\nline2" | awk 'BEGIN { print "begin...\n" } { print } END { print "end...\n" }'

begin...


line1

line2

end...


//2)、awk实现累加求和

[root@localhost program_test]# seq 5 | awk 'BEGIN { sum=0; print "summary:" } { print $1"+"; sum+=$1; } END { print "=="sum }'

summary:

1+

2+

3+

4+

5+

==15


//3)、awk 设定定界符.

//-F 定界符  $NF 一行中的最后一个字段

[root@localhost program_test]# awk -F: '{ print $1 "\t" $NF }' /etc/passwd

root /bin/bash

bin /sbin/nologin

daemon /sbin/nologin


//4)、打印文件中的每个字母

[root@localhost program_test]# cat read_each_word.sh


cat hello.c | \

( while read line;

do

#echo $line;

for word in $line;

do

#echo $word;

for((i=0;i<${#word};i++))

do

echo ${word:i:1} ;

done

done

done )



//5)、打印第4-6行内容

[root@localhost program_test]# seq 100 | awk 'NR==4, NR==6'

4

5

6


//6)、awk实现类似tac逆序的功能.

[root@localhost program_test]# seq 9 | awk '{ lifo[NR]=$0; lno=NR } END { print "NR = " NR; for(;lno>-1;lno--) { print lifo[lno]; } }'

NR = 9

9

8

7

6

5

4

3

2

1


相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
115 1
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
68 2
6种方法打造出色的Shell脚本
|
28天前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
33 0
Linux 如何更改默认 Shell
|
1月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
63 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
55 2
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
79 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
61 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
36 0
|
监控 关系型数据库 应用服务中间件