Linux中常用的文本处理命令详解
2020-01-15 03:36
627 查看
一.Linux中常用的文本处理命令(shell中常用的命令)
a=
命令|可把命令的结果赋值给a
1、diff
(1)显示结果解释
[num1.num2][a/c/d][num3,num4]
(1)num1、num2表示在第一个文件中的行数
(2)a表示添加
c表示更改
d表示删除
num3、num4表示在第二个文件中的行数
(4)< 表示第一个文件中的内容
> 表示第二个文件中的内容
例如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-3 file |截取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 "\<root" file |root字符前不能有其他字母 grep -E "root\>" file |root字符后不能有其他字母 grep -E "\<root\>" 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结尾的行的内容
- 点赞
- 收藏
- 分享
- 文章举报
![](https://g.csdnimg.cn/static/user-reg-year/1x/1.png)
相关文章推荐
- linux常用的文本处理命令
- Linux权限处理常用的四个命令详解
- linux常用命令(1)-文本处理命令
- Linux中常用命令之一——文本处理
- Linux常用命令详解之文件处理命令二
- Linux下常用文本处理命令
- linux文本处理三剑客(一):grep命令详解
- [文件]Linux文本处理常用命令总结
- Linux常用命令详解之文件处理命令三
- Linux常用文本处理命令总结1
- 详解linux文件处理的的常用命令
- Linux 中常用的文本(行)处理命令
- linux常用命令(七)简单的文本处理
- Linux常用文本处理命令
- Linux命令--文本处理命令详解uniq
- linux下常用文本处理命令
- Linux下常用文本处理命令
- Linux下常用文本处理命令
- linux sed命令参数及用法详解---linux 利用script来处理文本文
- Linux下常用文本处理命令