您的位置:首页 > 运维架构 > Linux

linux 文本处理命令

2017-05-30 13:53 218 查看
声明:本文总结自互联网,欢迎补充或占为己有

1. 显示文本

普通文本:

cat、 tac、 more、 less、 head、 tail、 nl、 grep 、 rev、 fold、acat、 pr

含有不可见字符的文本:

hexdump、 od、 xxd

2. 文本格式转换

dos2unix、unix2dos、 unix2mac

3. 编码查询和转换

encguess、enca、iconv、enconv 、base64

4. 文本统计

wc

#wc命令说明:
统计文本文件中有多少字,多少行,多少字符。
#格式:
wc [-lwm]
#参数说明:
-l :    仅显示行数;
-w :    仅显示字数(英文单词个数);
-m :    字符数;


5. 内容排序排重

sort、tsort、uniq

#sort命令说明:
将文本文件的内容按行排序。
#格式:
sort [-fbMnrtuk] [file or stdin]
# 参数说明:
-f :    忽略大小写;
-b :    忽略最前面的空格;
-u :    即uniq,重复行仅出现一次;
-M :    以月份的名字来排序;
-n :    使用“纯数字”来排序;
-r :    反向排序;
-t :    分隔符,默认为tab键;
-k :    按指定字段排序;

#对文件/etc/passwd以第三栏排序
cat /etc/passwd | sort -t ':' -k 3


#uniq命令说明:
如果排序完成了,将重复的行仅显示一次。注意,若文件未排序,该命令失效。
#格式:
uniq [-ic]
#参数说明:
-i :    忽略大小写;
-c :    统计每行重复的次数;


6. 文本比较

cmp、comm、 diff、patch

#diff命令说明:
以“行”为单位进行文件比较,一般用在ASCII纯文本文件。
#格式:
diff [-bBi] file1 file2
#参数:
-b : 忽略一行中有多个空白的差异;
-B : 忽略空白行的不同;
-i : 忽略大小写;


#diff命令说明:
以“行”为单位进行文件比较,一般用在ASCII纯文本文件。
#格式:
diff [-bBi] file1 file2
#参数:
-b : 忽略一行中有多个空白的差异;
-B : 忽略空白行的不同;
-i : 忽略大小写;


#cmp命令说明:
以“位”为单位进行文件比较,可以比较二进制文件。
#格式:
cmp [-s] file1 file2
#参数:
-s : 将所有不同点的位都列出来,默认仅输出第一个发现的不同点;


#patch命令说明 :
diff old new > patch_file命令可以找出new文件与old文件不同的地方,然后用patch命令给old文件打上补丁,即与new文件相同了。
#格式:
patch -pN < patch_file
#参数:
-pN表示取消N层目录。


7. 内容查找

grep, egrep, fgrep, ag

#grep命令说明:
按行处理,输出文件中包含搜索字符串的所有行。
格式:
grep [-acinv] ‘搜索字符串’ filename
参数说明:
-a:在二进制文件中,以文本文件的方式搜索数据;
-c:计算找到“搜索字符串”的次数;
-i:忽略大小写;
-n:输出行号;
-v:反向选择;
-E:扩展正则表达式

#在文件a.txt中搜索包含字符串good或glad的行
grep -E 'g(oo|la)d' a.txt


8. 内容摘要,加密和解密

md5sum, rsa, ssl, gpg

9. 文本分割和整合

split、cut、join、paste、csplit

#split命令说明:
将一个大文件拆分为几个小文件。
#格式:
split [-bl] fle
#参数说明:
-b : 拆分的文件大小,可加单位,如b, k, m等;
-l : 按行数进行拆分;

#将文件bigfile按512K拆分,拆分后的文件依次为:smallfileaa、smallfileab
split -b 512k bigfile smallfile
#将文件bigfile中的每10行拆分成一个小文件
split -l 10 bigfile smallfile


#cut命令说明:
按行处理,将一行消息的某段切出来。
#格式:
cut -d '分割字符' -f fields
cut -c m-n

#取出环境变量PATH中的第3个和第5个路径
echo $PATH | cut -d ':' -f 3,5
#取出环境变量PATH中的第3个到第5个路径
echo $PATH | cut -d ':' -f 3-5
#将export中的每行的前面11个字符删除留,保留从第12个字符开始的所有字符 export | cut -c 12-


#join命令说明:
处理两个文件中有相同数据的行,将它们加在一起。
#格式:
join [-ti12] file1 file2
#参数说明:
-i : 忽略大小写;
-t : 分隔符,默认为空格符;
-1 m : 指定file1用来比较的字段m,默认值为1;
-2 n : 指定file2用来比较的字段n,默认值为1;


#paste命令说明:
比较两个文件的数据关联性,直接将“两行贴在一起”,中间以tab键隔开。
#格式:
paste [-d] file1 file2
#参数说明:
-d:后面接分隔符,默认为tab键。


10. 字符替换

tr、expand、unexpand

#tr命令说明:
单个字符的处理工具,可以用于删除字符、替换字符等基本功能。
#格式:
tr [-ds] SET
#参数说明:
-d:删除,例如:cat file | tr -d '\r',相当于dos2unix命令所起的作用。
-s:替换字符,例如:cat file | tr -s [0-9],如果某个数字连续出现,仅保留第一个。

#将file中的小写字符全部改为大写
cat file | tr [a-z] [A-Z]


#expand命令说明:
将tab键转换成空格键。
#格式:
expand [-t] file
#参数说明:
-t n : 后面可以接一个数字n,一个tab键替换为n个空格键,默认值为8。


11. 格式化输出

fmt, col, column

#col命令说明:
格式化显示列。
#格式:
col [-x]
#参数说明:
-x:将tab键转换成对等的空格键;

#使用cat -A,tab键会以^I显示,经过col -x处理,tab替换为空格
cat -A /etc/man.config | col -x | cat -A


12. 报表生成

awk

#awk命令说明:
将一行消息分成数个段,对每行进程分别处理
#格式:
awk  '条件  {命令}'  file
#awk的内置变量:
$n:该行的第n个字段;
NF:每一行拥有的字段总数;
NR:当前行的行号;
FS:分隔符,默认为空格键;

#打印passwd文件第三栏小于10的行的第1、3栏
cat /etc/passwd | awk 'BEGIN {FS=":"} $S3<10 {print $1 "\t" $3}'


13. 文本编辑器

eamcs, vim, sed

#sed命令说明:
分析STDIN的数据,将数据处理后,输出到STDOUT。
#格式:sed [-nefr] 动作
#参数说明:
-n: 安静模式,仅显示经过sed特殊处理的行;
-e: 直接在命令行模式进行sed的操作编辑;
-r: 支持扩展正则表达式语法
-f file:    将sed操作写在一个文件中;
#动作说明:
n1和n2代表选择进行操作的行数
function来源于ed编辑器;

#在/etc/passwd第2行下面新增一行,写入"Hello World"
nl /etc/passwd | sed '2a Hello World'
#在/etc/passwd第2行上面新增一行,写入"Hello World"
nl /etc/passwd | sed '2i Hello World'
#删除/etc/passwd中的第2至5行
nl /etc/passwd | sed '2,5d'
#仅显示2到5行,注意,如果不加-n,2到5行将重复输出
nl -n /etc/passwd | sed '2,5p'
#将第1~20行中出现的所有字符串old替换为new
nl /etc/passwd | sed '1,20s/old/new/g'


14. 文本流复制

tee

#tee命令说明:
双向重导向,从标准输入读取数据,输出到屏幕上,同时保存成文件。
#格式:
tee [-a] file
#参数说明:
-a:以累加的方式,将数据加入到file中。

#将ls命令的数据存一份到myfile中,同时屏幕也有输出数据
ls -al /home | tee ~/myfile | more
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 文本处理