linux 文本处理语言,Linux中常用的文本处理命令详解

一.Linux中常用的文本处理命令(shell中常用的命令)

a=命令 |可把命令的结果赋值给a

1、diff

(1)显示结果解释

[num1.num2][a/c/d][num3,num4]

(1)

num1、num2表示在第一个文件中的行数

(2)

a表示添加

c表示更改

d表示删除

(3)

num3、num4表示在第二个文件中的行数

(4)

< 表示第一个文件中的内容

> 表示第二个文件中的内容

(5)

例如2,3c2,3表示改变第一个文件中第二和第三行,即可匹配第二个文件中的第二和第三行

例如1a2,>456,意为第一个文件为1行,第二个文件为2行,需给第一个文件添加内容为“456”的第2行才可与第二个文件匹配

例如2d1,<456,意为第一个文件为2行,第二个文件为1行,需给第一个文件减少内容为“456”的行才可与第二个文件匹配

(2)常用diff命令

diff file1 file2|对比file1、file2文件的内容差别并显示

diff -b file1 file2|对比file1、file2文件的内容差别,忽略空格区别并显示

diff -B file1 file2|对比file1、file2文件的内容差别,忽略空行区别并显示

diff -i file1 file2|对比file1、file2文件的内容差别,忽略大小写区别并显示

diff -u file1 file2|以合并的方式显示文件内容的差别

diff -c file1 file2|显示全部内容,标出有差别的行(以“!”标出)

diff -p c1 c2|比较c1、c2文件的差别,这两个文件为c语言的程序码文件,显示有区别的函数名称

diff -r dir1 dir2|对比dir1、dir2子目录中的文件并显示

2、patch

diff -u file1 file2 > file.path|用diff命令生成一个file1的补丁文件file.path

yum install patch -y|需要安装patch

patch file1 file.patch|安装后使用patch 给file1文件用file.path打补丁,此时打过补丁的file1文件原文件不被保存,直接保存修改后的新文件

patch -b file1 file.patch|给file1文件用file.path打补丁,此时原文件被保存为file1.orig,新文件为file1

3、cut

cut -d |指定文件中的分隔符

cut -d : file|指定file文件中的分隔符“:”

cut -f|指定截取的列

cut -d : -f 1-3file|截取file中以分隔符隔开的1-3列

cut -d : -f 1,3 file|截取file中以分隔符隔开的1、3列

cut -c|指定截取的字符的位置

cut -c 1-4 file|截取file中的1-4列字符

cut -c 1,4 file|截取file中的1、4列字符

4、sort

sort file|给file中的内容排序,默认只按第一个字符排序

sort -n file|给file中的内容排序,按照数字大小排序(从小到大)

sort -r file|给file中的内容排序,倒序(从大到小)

sort -rn file|给file中的内容排序,倒序按数字大小排序(从大到小)

sort -run file|u为省略重复的数字,倒序按数字排序

sort -un file|正序按数字排序,省略重复

sort -o|将结果输出到某个文件

sort -t|指定分隔符

sort -k|指定列

sort -t : -k 1 file -o abc|将file文件中的内容以“:”分隔符,指定第1列的字符排序,将结果输出到abc文件中

5、uniq

sort -n file |uniq -u|将结果中只有一次的内容显示出来

sort -n file |uniq -c|统计内容出现的次数和内容信息,并显示出来

sort -n file |uniq -d|将结果中有多次的内容显示出来

6、&& 和 ||

&&|意为若条件成立(真),则

|||意为若条件不成立(假),则

&& echo yes|若条件成立,显示yes

|| echo no|若条件不成立,显示no

7、test

test "$a" = "$b" 等同于 [ "$a" = "$b" ]

[ "$a" = "$b" ]|检测a的值是否等于b的值

[ "$a" != "$b" ]|检测a的值是否不等于b的值

[! "$a" = "$b" ]|检测a的值是否等于b的值的非

[ "$a" -eq "$b" ]|检测a的值是否等于b的值

[ "$a" -ne "$b" ]|检测a的值是否不等于b的值

[ "$a" -le "$b" ]|检测a的值是否小于等于b的值

[ "$a" -lt "$b" ]|检测a的值是否小于b的值

[ "$a" -ge "$b" ]|检测a的值是否大于等于b的值

[ "$a" -gt "$b" ]|检测a的值是否大于b的值

[ "$a" -lt "$b" -a "$a" -gt "$c" ]|检测a的值是否小于b的值且大于c的值

[ "$a" -lt "$b" -o "$a" -gt "$c" ]|检测a的值是否小于b的值或大于c的值

8、grep 文本过滤命令

grep root(匹配条件) file(处理文件)|在file的内容中搜索匹配条件的内容并显示

grep ^root file|将以root开头的内容显示出来

grep root$ file|将以root结尾的内容显示出来

grep -i root file|搜索时不区分root的大小写

grep -E "^root|root$" file|扩展grep的模式下,可以同时有多条匹配条件

grep -E "\" file|root字符后不能有其他字母

grep -E "\" file|root字符前后均不能有其他字母

grep -E "a*b" test|将test中含有a(不限制a的数量)b的内容显示出来

grep -E "a.*b" test|将test中含有a(不限制字符数量和内容)b的内容显示出来

grep -E "a{2,3}b" test|将test中含有a(有2-3个a)b的内容显示出来

grep -E "a{,4}b" test|将test中含有a(0-4个)b的内容显示出来

grep -E "a{4,}b" test|将test中含有a(4-无穷)b的内容显示出来

grep -E "a?b" test|将test中含有a(0-1个)b的内容显示出来

grep -E "a+b" test|将test中含有a(1-无穷)b的内容显示出来

grep -E "(ab)*" test|将test中含有ab(不限制ab的数量)的内容显示出来

grep -E "(ab){3,}" test|将test中含有ab(3-无穷个ab)的内容显示出来

9、sed

-n|不输出模式空间中的内容

-e|多条策略(“;”隔开的)同时生效

P模式

sed '5p' fstab|查看fstab第5行的内容,此时会默认输出模式空间中的内容

sed -n '5p' fstab|查看fstab第5行的内容(此时仅第5行显示)

sed -n '1,5p' fstab|查看fstab第1-5行的内容

sed -ne '1p;5p' fstab|查看第1、第5行的内容

sed -ne '1p' -ne '5p' fstab|查看第1、第5行的内容

D模式

sed '/UUID/d' fstab|删除fstab中含有UUID的行

sed '/UUID/d!' fstab|删除fstab中不含有UUID的行

sed '/^UUID/d' fstab|删除fstab中以UUID开头的行

sed '/#/d' fstab|删除fstab中含有#的行

sed '/UUID/d;/fstab/d' fstab|删除fstab中含有UUID或fstab的行

sed '/\(UUID\|fstab\)/d' fstab|删除fstab中含有UUID或fstab的行

sed '/etc/{/fstab/d}' fstab|删除fstab中含有etc且含有fstab的行

sed '/#/{/etc/{/fstab/d}}' fstab|删除fstab中含有#且含有etc且含有fstab的行

A模式

sed '/#/a @@@@@' fstab|给fstab中含有#的行添加@@@@@,添加至行后一行

I模式

sed '/#/i @@@@@ lalalala' fstab|给fstab中含有#的行插入@@@@@ lalalala,插入至行前一行

sed '/#/i @@@@@\nlalalala' fstab|给fstab中含有#的行插入@@@@@(换行)lalalala。插入至行前一行

C模式

sed '/etc/c yeahhhhhhhhhh' fstab|将fstab中含有etc的行内容改变为yeahhhhhhhhhh

W模式

sed '/etc/w 123' fstab|将fstab中含有etc的行的内容输出保存至123文件内

sed的其他用法

sed -n '/ftp/=' passwd|显示passwd中内容含有ftp的行是第几行(只有行号)

sed '/ftp/=' passwd|显示passwd中内容含有ftp的行是第几行,且显示模式空间内容(在文中显示行号)

sed -ne '/ftp/p;/ftp/=' passwd|显示passwd中内容含有ftp的行是第几行,且显示该行(有行号和该行)

sed -e 's/:/@/g' passwd|将passwd中每一行、每一列的“:”替换为“@”(s代表每一行,g代表每一列)

sed -e 's/:/@/' passwd|将passwd中每一行、第一列的“:”替换为“@”(默认仅替换第一列)

sed -e '2,4s/:/###/' passwd|将passwd中的2-4行、第一列的“:”替换为“@”

sed -e '2,4s/:/###/g;5,7s/sbin/AAAAAAA/' passwd|将passwd中的2-4行,每一列的“:”替换为“@”,5-7行、第一列的“sbin”替换为“AAAAAAA”

sed '/^root/,/^daemon/s/:/####/g' passwd|将passwd中以“root”开头的行到以“daemon”开头的行之间(包括该两行)的每一列的“:”替换为“####”

sed 's/\//####/' passwd|将passwd中每一行第一列的“/”替换为“####”

sed 's/\//####/g' passwd|将passwd中每一行每一列的“/”替换为“####”

vim rule|建立一个rule策略文件,写入需要的策略,策略为命令引号中的内容,如2,4s/:/###/等

sed -f rule passwd|将rule策略文件中的策略对passwd执行

sed 'G' rule|给rule文件的每一行后换行

sed '$G' rule|rule文件的最后一行后换行

sed '$!G' rule|rule文件的最后一行后不换行(其他行换行)

sed '=' rule|给rule中的每一行标出行号(在该行前一行标出)

sed '=' rule |sed 's/\n/ /g'|试图将换行符替换为空格,将行号与内容放在同一行,此时因为读取rule的内容时是一条一条读取的,所以无法替换换行符

sed '=' rule |sed 'N;s/\n/ /g'|N为一次读取两行进行处理,这样就可以实现将行号与内容放在同一行

sed -n '$p' rule|显示rule最后一行的内容

sed -n '$=' rule|显示rule的最后一行的行号

10、awk

awk '{print FILENAME}' test|每处理一条内容,输出一条FILENAME打印到屏幕,FILENAME代表处理的文件名,比如此时为test

awk '{print 123}' test|每处理一条内容,输出一条123打印到屏幕

sed '=' passwd |sed 'N;s/\n/\t/g' > test|建立一个便于测试的文件test

awk 'NR\==3{print}' test|打印test第3行的内容

awk 'NR\==3||NR==5{print}' test|打印test第3行和第5行的内容

awk -F : '{print $3}' test|指定分隔符为“:”,打印第3列的内容

awk -F : '{print $3$5}' test|指定分隔符为“:”,打印第3和第5列的内容,此时两列内容连在一起

awk -F : '{print $3,$5}' test|指定分隔符为“:”,打印第3和第5列的内容,两列内容之间用空格隔开

awk -F : '{print $3"###"$5}' test|指定分隔符为“:”,打印第3和第5列的内容,两列内容之间用“###”隔开

awk -F : 'BEGIN{print "NAME"}{print $1}END{print "END"}' passwd|指定分隔符为“:”,先执行打印“NAME”字符的命令,再执行打印出passwd第一列的命令,最后执行打印出“END”的命令

awk -F : '/^root/{print $1}' passwd|指定分隔符为“:”,打印出passwd中以root开头的第一列的内容

awk '/^root/{print}' passwd|打印出passwd中以root开头的行的内容

awk -F : '/bash$/{print $1}' passwd|指定分隔符为“:”,打印出passwd中以bash结尾的第一列的内容

awk '/bash$/{print}' passwd|打印出passwd中以bash结尾的行的内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值