Shell-4-让文本飞
时间:2022-04-22
本文章向大家介绍Shell-4-让文本飞,主要内容包括1.正则表达式、2.grep、3.用cut按列切分文本、4.sed、5.awk、6.统计特定文件中的词频、7.按列合并多个文件(paste)、8.打印文件或行中的第n个单词或列、9.打印行或样式之间的文本、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1.正则表达式
^ |
行起始标志 |
---|---|
$ |
行尾标记 |
. |
匹配任意一个字符 |
[ ] |
匹配包含在[字符]之中的任意一个字符,coo[kl]匹配cook或cool |
[^] |
匹配除[^字符]的任意一个字符 |
[-] |
匹配[]中范围内任意一个字符 |
? |
匹配之前的项一次或0次 |
+ |
匹配之前的项一次或多次 |
* |
匹配之前的项0次或多次 |
() |
创建一个用于匹配的子串 |
{n} |
匹配之前的项n次 |
{n,m} |
指定之前的项所必须匹配的最小次数和最大次数 |
| |
交替-匹配|两边的任意一项 |
转义符可以将上面的符号转义 |
2.grep
(1)搜索包含特定模式的文本行
[root@cai tmp]# cat 1.txt
this is a test2
11
44
33
55
55
[root@cai tmp]# grep 3 1.txt
33
也可以对多个文件进行搜索:grep 3 1.txt 2.txt 3.txt
使用正则表达式必须使用egrep
(2)要打印除某行之外所有行
[root@cai tmp]# grep -v 3 1.txt
this is a test2
11
44
55
55
(3)统计文本或文本中包含匹配字符串的行数
[root@cai tmp]# grep -c 3 1.txt
1
(4)打印包含匹配字符串的行数
[root@cai tmp]# grep 3 -n 1.txt
4:33
(5)搜索多个文件并找出匹配文本位于哪个文件中
[root@cai tmp]# grep -l 3 1.txt 2.txt
1.txt
2.txt
(6)如果进行递归查询,可以使用
grep “text” . -R -n
(7)忽视样式中的大小写(grep -i pattern file)
(8)用grep匹配多个样式
grep -e “pattern1” -e “pattern2”
(9)在grep搜索中指定或排除文件
grep “main()” . -r --exclude “readne”
(10)打印出匹配文本之前或之后的行
要打印匹配某个结果之后的3行,可以使用-A选项
[root@cai tmp]# seq 10|grep 5 -A 3
5
6
7
8
要打印匹配某个结果之前的3行,可以使用-B选项
[root@cai tmp]# seq 10|grep 5 -B 3
2
3
4
5
要打印匹配某个结果之前以及之后的3行,使用-C选项
[root@cai tmp]# seq 10|grep 5 -C 3
2
3
4
5
6
7
8
3.用cut按列切分文本
cut -f 2,3 filename
4.sed
(1)sed可以替换给定文本中的字符串
sed ‘s/pattern/replace_string’ file
(2)在默认情况下,sed只会打印替换后的文本,要想保留同时更改,用-i选项
sed -i ‘s/pattern/replace_string’ file
(3)如果想替换所有内容,在结尾加上参数g
sed ‘s/pattern/replace_string/g’ file
(4)移除空白行
sed ‘ /^$/d’ file
(5)直接在文件中进行替换
sed ‘s/PATTERN/replacement’ -i filename
(6)组合多个表达式
sed ‘expression’ | sed ‘expression’
=sed ‘expression;expression’
=sed -e ‘expression’ -e ‘expression’
5.awk
脚本基本结构如下所示:
awk ‘BEGIN{ print “start” } pattern {commands} END{print “end” } ’ file
awk ‘BEGIN {statements} {statements} END { end statements}’
6.统计特定文件中的词频
#!/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%sn","word","count");
for(ind in count)
{ printf("%-14s%dn",ind,count[ind]) ; }
}'
~
[root@cai shell]# sh word_freq.sh /tmp/1.txt
word count
a 1
this 1
is 1
7.按列合并多个文件(paste)
[root@cai tmp]# paste 1.txt 2.txt
this is a test2 cairui
11 xijinpng
44 aiyinsitan
33
55
55
8.打印文件或行中的第n个单词或列
下面打印第5列
awk ‘{ print $5 }’ filename
9.打印行或样式之间的文本
(1)[root@cai tmp]# seq 100|awk 'NR==4,NR==8'
(2)4awk ‘NR==M,NR==N’ filename
5
6
7
8
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法