linux 文本处理命令

声明:本文总结自互联网,欢迎补充或占为己有

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

你可能感兴趣的:(文本处理)