《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

如果感觉本文对您有帮助,请点击支持一下,您的支持是我坚持写作最大的动力,谢谢!


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Linux Shell脚本攻略是一本非常好的学习Linux Shell脚本编程的书籍。这本书包含了大量实用的技巧和示例,可以帮助初学者快速入门,也可以提高高级用户的技能水平。 这本书首先介绍了Shell脚本编程的基础知识,如变量、循环、条件语句等等。然后,它深入探讨了如何利用Shell脚本解决各种实际问题,如文件处理文本处理、网络编程等等。 此外,这本书还介绍了一些高级主题,如正则表达式、调试技巧和Shell脚本的优化等等。这些内容都是非常实用的,可以帮助你更好地掌握Shell脚本编程。 总的来说,如果你想深入学习Linux Shell脚本编程,那么Linux Shell脚本攻略是一本非常值得阅读的书籍。 ### 回答2: Linux Shell脚本攻略是一本非常有用的书籍,涵盖了大量的脚本编程知识和技巧。这本书适用于初学者和有经验的开发人员,是提高Shell编程技能的很好的资料。 这本书首先介绍了Shell脚本编程的基础知识,如文件和目录操作、变量、选项和参数处理、流程控制等。然后,它通过实例加深对Shell脚本的理解,如使用grep来搜索文本、定时任务、文件备份和恢复等。 除此之外,本书还涵盖了一些高级主题,如正则表达式、文本处理和AWK命令。这些主题对于需要处理数据或日志文件的开发人员非常有用。此书还介绍了如何使用Shell脚本进行系统管理任务和自动部署。这是作为系统管理员的人必须要了解的技能,以确保系统高效运转和安全。 此外,本书还介绍了Linux Shell编程中的一些最佳实践,如代码重构、调试和测试Shell脚本。这些技巧可以帮助开发人员编写可读性高、可移植性强、可维护性好的脚本。 总之,Linux Shell脚本攻略是一本非常有用的书籍,涵盖了许多实用的技能和技巧,是值得初学者和开发人员深入探讨的宝库。对于从事Linux系统开发和系统管理的人来说,这本书是必不可少的参考资料。 ### 回答3: Linux shell脚本攻略是一本介绍Linux shell脚本编程的实战书籍。在目前的互联网时代,Linux操作系统和开发工具已成为程序员必不可少的技能。而编写脚本Linux操作系统最强大的功能之一,通过脚本可以完成多种任务的自动化操作,让我们的工作变得更加高效。 这本书的目的是教会读者如何利用Linux shell脚本编写高效、简洁和可维护的脚本,帮助读者学习Linux脚本语言的基础知识、语法和流程控制,以及进阶的脚本编程技巧。具体内容包括: 1. shell脚本语言介绍 2. shell脚本语法 3. 常用的Shell指令和内置命令 4. shell脚本的变量 5. shell脚本的字符串操作 6. shell脚本的数学运算 7. shell脚本的条件和循环语句 8. shell脚本的函数和参数 9. shell脚本的文件操作 10. shell脚本的进程管理 11. shell脚本的网络编程 12. shell脚本与其他编程语言的交互 书中内容深入浅出,通过丰富的示例帮助读者理解和掌握各种脚本编程技巧。此外,编程实践是学习编程语言最好的方法,书中提供了更多实际案例,让读者可以通过编写实际脚本来应用所学技术,提高自己的编程能力。 总之,Linux shell脚本攻略是一本强大、实用且易于理解的书籍,它对于Linux系统管理员、开发人员、嵌入式程序员、学生等不同领域的程序员来说都是必备的。在应用熟练后,可以大大提高我们工作的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铭毅天下

和你一起,死磕Elastic!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值