《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

作者:铭毅天下

转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/42364823

相关文章
|
4月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
479 9
|
4月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
4月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
421 2
|
4月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
6月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
783 0
|
4月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
503 1
二、Linux文本处理与文件操作核心命令
|
4月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
346 137
|
4月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
792 57
|
3月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
626 2
|
4月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
375 0
Linux内存问题排查命令详解