前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell-4-让文本飞

Shell-4-让文本飞

作者头像
用户1173509
发布2018-01-17 14:48:21
7300
发布2018-01-17 14:48:21
举报
文章被收录于专栏:CaiRuiCaiRui

1.正则表达式

^

行起始标志

$

行尾标记

.

匹配任意一个字符

[ ]

匹配包含在[字符]之中的任意一个字符,coo[kl]匹配cook或cool

[^]

匹配除[^字符]的任意一个字符

[-]

匹配[]中范围内任意一个字符

?

匹配之前的项一次或0次

+

匹配之前的项一次或多次

*

匹配之前的项0次或多次

()

创建一个用于匹配的子串

{n}

匹配之前的项n次

{n,m}

指定之前的项所必须匹配的最小次数和最大次数

|

交替-匹配|两边的任意一项

\

转义符可以将上面的符号转义

2.grep

(1)搜索包含特定模式的文本行

代码语言:javascript
复制
[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)要打印除某行之外所有行

代码语言:javascript
复制
[root@cai tmp]# grep -v 3 1.txt 
this is a test2
11
44
55
55

(3)统计文本或文本中包含匹配字符串的行数

代码语言:javascript
复制
[root@cai tmp]# grep -c 3 1.txt 
1

(4)打印包含匹配字符串的行数

代码语言:javascript
复制
[root@cai tmp]# grep 3 -n 1.txt 
4:33

(5)搜索多个文件并找出匹配文本位于哪个文件中

代码语言:javascript
复制
[root@cai tmp]# grep -l 3 1.txt 2.txt 
1.txt
2.txt

(6)如果进行递归查询,可以使用

代码语言:javascript
复制
grep “text” . -R -n

(7)忽视样式中的大小写(grep -i pattern file)

(8)用grep匹配多个样式

代码语言:javascript
复制
grep -e “pattern1” -e “pattern2”

(9)在grep搜索中指定或排除文件

代码语言:javascript
复制
grep “main()” . -r --exclude “readne”

(10)打印出匹配文本之前或之后的行

要打印匹配某个结果之后的3行,可以使用-A选项

代码语言:javascript
复制
[root@cai tmp]# seq 10|grep 5 -A 3
5
6
7
8

要打印匹配某个结果之前的3行,可以使用-B选项

代码语言:javascript
复制
[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按列切分文本

代码语言:javascript
复制
cut -f 2,3 filename

4.sed

代码语言:javascript
复制
(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

代码语言:javascript
复制
脚本基本结构如下所示:
awk ‘BEGIN{ print “start” } pattern {commands} END{print “end” } ’ file
awk ‘BEGIN {statements} {statements} END { end statements}’

6.统计特定文件中的词频

代码语言:javascript
复制
#!/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]) ; }
}'
~      
 [root@cai shell]# sh word_freq.sh /tmp/1.txt 
word          count
a             1
this          1
is            1

7.按列合并多个文件(paste)

代码语言:javascript
复制
[root@cai tmp]# paste 1.txt 2.txt 
this is a test2    cairui
11    xijinpng
44    aiyinsitan
33    
55    
55    

8.打印文件或行中的第n个单词或列

代码语言:javascript
复制
下面打印第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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.正则表达式
  • 2.grep
  • 3.用cut按列切分文本
  • 4.sed
  • 5.awk
  • 6.统计特定文件中的词频
  • 7.按列合并多个文件(paste)
  • 8.打印文件或行中的第n个单词或列
  • 9.打印行或样式之间的文本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档