> 文章列表 > 文本处理工具

文本处理工具

文本处理工具

Grep工具的基本使用


grep作用:grep是行过滤工具;用于根据关键字进行行过滤

提示:通过alias命令设置grep别名,搜索参数时带颜色显示

alias grep='grep color=auto '

命令语法格式:

grep [选项] '参数' 文件

grep命令选项:

  • -n :显示行号

  • -i:忽略大小写

  • ^xxx:以xxx开头的格式

  • xxx$:以xxx结尾的格式

  • -v:取反

  • -B:打印前几行

  • -A:打印后几行

  • -C:过滤上下文(前几行,后几行)

  • -w:按单词搜索

  • -o:打印匹配关键字

  • '^$':空行


Cut工具的基本使用


cut作用:cut是列截取工具,用于列的截取

命令语法格式:

cut 选项 文件名

cut命令选项:

  • -c:以字符为单位(个)分割,截取

  • -d:自定义分隔符,默认为制表符\\t

  • -f:与-d一起使用,指定截取哪个区域

示例: 如何过滤和截取centos6系统运行级别

runlevel | cut-c3
runlevel | cut-d:' '-f2
grep-v'^#' /etc/inittab | cut-d: -f2
grep'^id' /etc/inittab | cut-d: -f2
grep"initdefault:$" /etc/inittab | cut -c4
grep -v ^# /etc/inittab | cut -c4
grep'id:' /etc/inittab | cut-d: -f2
cut-d':'-f2 /etc/inittab | grep-v ^#
cut-c4 /etc/inittab | tail -1
cut-d: -f2 /etc/inittab | tail -1

Sort工具的基本使用


sort作用:sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将它们按升序输出

sort命令选项:

  • -u:去除重复

  • -r:降序排列,默认是升序

  • -o:将排序结果输出到文件这,类似重定向符号>

  • -n:以数字排序,默认是按字符排序

  • -t:分隔符

  • -k:第N列

  • -b:忽略前导空格

  • -R:随机排列,每次运行的结果均不同


Uniq工具的基本使用


uniq作用:uniq用于去除连续的重复行

uniq命令选项:

  • -i:忽略大小写

  • -c:统计重复行次数

  • -d:只显示重复行


Tee工具的基本使用


tee作用:tee工具是将数据输出显示屏幕一份,然后再重定向输入到文件一份,即:(屏幕输出|文本输入 )

tee命令选项:

  • -a:重定向追加数据


Diff工具的基本使用


diff作用:diff工具用于逐行比较文件的不同

注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配。

命令语法格式:

diff [选项] 文件1 文件2

diff命令选项:

  • -b:不检查空格

  • -B:不检查空白行

  • -i:不检查大小写

  • -w:忽略所有的空格

  • --normal:正常格式显示(默认)

  • -c:上下文格式显示

  • -u:合并格式显示

举例说明:

  • 比较两个普通文件异同,文件准备:

[root@localhost~]# cat file1
aaaa
111
hello world
222
333
bbb
[root@localhost~]#
[root@localhost~]# cat file2
aaa
hello
111
222
bbb
333
world

正常格式显示比较结果,解释说明:

diff目的:file1如何改变才能和file2匹配
[root@localhost~]# diff file1 file2
1c1,2     #第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配
​
< aaaa    #小于号"<"表示左边文件(file1)文件内容
---       #---表示分隔符
> aaa     #大于号">"表示右边文件(file2)文件内容
> hello   
3d3       #第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配
< hello world
5d4       #第一个文件的第5行删除后才能和第二个文件的第4行匹配
< 333
6a6,7     #第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配
> 333     #需要增加的内容在第二个文件里是333和world
> world

上下文格式显示比较结果,解释说明:

[root@localhost~]# diff -c file1 file
#前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号***表示file1,---表示file2
*** file1 2022-01-2721:45:05.748650262 +0800
--- file2 2022-01-2721:45:30.470646030 +0800
***************  #我是分隔符
*** 1,6 ****     #以***开头表示file1文件,1,6表示1到6行
!aaaa           # !表示该行需要修改才能与第二个文件匹配111
- hello world    # -表示需要删除该行才能与第二个文件匹配222
-333            # -表示需要删除该行才能与第二个文件匹配bbb
---1,7 ---      # 以---开头表示file2文件,1,7表示1到7行
!aaa            # 表示第一个文件需要修改才能与第二个文件匹配
!hello          # 表示第一个文件需要修改才能与第二个文件匹配111222bbb
+333            # 表示第一个文件需要加上该行才能与第二个文件匹配
+ world          # 表示第一个文件需要加上该行才能与第二个文件匹配

合并格式显示比较结果,解释说明:

[root@localhost~]# diff -u file1 file2
#前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号---表示file1,+++表示file2
--- file1 2022-01-2721:45:05.748650262 +0800
+++ file2 2022-01-2721:45:30.470646030 +0800
@@ -1,6 +1,7 @@
-aaaa
+aaa
+hello
111
-hello world
222
-333bbb
+333
+world
  • 比较两个目录不同

#默认情况下也会比较两个目录里相同文件的内容
[root@localhost tmp]# diff dir1 dir2
diff dir1/file1 dir2/file1
0a1
> hello
only in dir1: file3
only in dir2: file1
#如果只需要比较两个目录里文件的不同,不需要进一步比较文件内容,需要加-q选项
[root@localhost tmp]# diff -q dir1 dir2
Files dir1/file1 and dir2/file1 differ
only in dir1: file3
only in dir2: file1

diff其他小技巧:

有时我们需要以一个文件为标准,去修改其他文件,并且 修改的地方较多时,我们可以通过打补丁的方式完成。

1)先找出文件不同,然后输出到一个文件
[root@localhost ~]# diff -uN file1 file2 > file.patch
-u:上下文模式
-N:将不存在的文件当作空文件
2)将不同内容打补丁到文件
[root@localhost ~]# patch file1.patch
patching file file1
3) 测试验证
[root@localhost ~]# diff file1 file2
[root@localhost ~]#

Paste工具的基本使用


paste作用:paste工具用于合并文件行

paste命令选项:

  • -d:自定义间隔符,默认是tab

  • -s:串行处理,非并行


Tr工具的基本使用


tr作用:tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换

命令语法格式:

用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理
#commands|tr  'string1'  'string2'
用法2:tr处理的内容来自文件,记住要使用"<"标准输入
# tr 'string1'  'string2' < filename
用法3:匹配string1进行相应操作,如删除操作
# tr options 'string1' < filename

tr命令选项:

  • -d:删除字符串1中所有输入字符

  • -s:删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串

常用匹配字符串:

字符串 含义

a-z或[:lower:] 匹配所有小写字母

A-Z或[:upper:] 匹配所有大写字母

0-9或[:digit:] 匹配所有数字

[:alnum:] 匹配所有字母和数字

[:alpha:] 匹配所有字母

[:blank:] 所有水平空白

[:punct:] 匹配所有标点符号

[:space:] 所有水平或垂直的空格

[:cntrl:] 所有控制字符 \\f Ctrl-L 走行换页 \\n Ctrl-J 换页 \\r Ctrl-M 回车

\\t Ctrl-I tab键


命令练习


1.过滤截取出网卡IP地址:

ifconfig eth0 | grep'netmask' | cut-d: -f2 | tr -d'a-zA-Z'

或者

ifconfig eth0 | grep 'netmask' | cut -d: -f2 | cut -d' ' -f1

2.过滤截取网络地址信息换行,并且去除空格

ifconfig ens33 | grep'netmask' | tr -d'a-z' | tr ' ''\\n' | grep-v'^$'

3.压缩空格并截取网络Mac地址信息

ifconfig eht0 | grep'HWaddr' | tr -s' '
ifconfig eth0 | grep'HWaddr' | cut-d' '-f5

4.将系统中所有普通用户的用户名、密码和默认shell保存到一个文件中,要求用户名密码和默认shell之间用tab键分割

注释:-E 匹配扩展正则表达式,|代表或者,是一个扩展正则

grep'bash$' /etc/passwd | grep-v'root' | cut-d: -f1,2,7 | tr ':''\\t' | tee qq.txt