linux文本工具,Linux的文本处理工具(一)

在linux上操作时,熟悉几个shell命令是必不可少的技能,比如grep,sed,sort等。下面以几个例子来说明几种常见的用法 #### grep

grep是Linux中强大的文本搜索工具,用其来查找文本是相当方便的

grep命令格式为:

grep [OPTION] PATTERN [FILE]

常用选项:

-A : 除了显示匹配上的行外,并显示该行之后的内容,可以理解为after

-B : 除了显示匹配上的行外,并显示该行之前的内容,可以理解为before

-c : 输出时显示匹配上的行的计数

-E : 可使用扩展正则表达式来匹配

-F : 用于查找固定字符串

-i : 忽视大小写的匹配

-n : 标示出匹配上的行数的行编号

-v : 只输出那些没有匹配上的行

-o : 只输出匹配上的那部分内容

-w : 只匹配整个单词

-a : 对二进制文件以text形式匹配

常见用法:

匹配固定字符串

grep -F pattern abc.txt

输出没有匹配上pattern的行

grep -v pattern abc.txt

输出匹配上pattern行的行数

grep -n pattern abc.txt

搜索目录,并且是递归搜索,比如递归搜索当前目录

grep -r pattern .

使用扩展正则匹配来搜索能匹配上pattern连续重复的行

grep -E '(pattern)+' abc.txt

匹配多个字符串

grep -e "aaa" -e "bbb"

只在目录中所有的.php和.html文件中递归搜索字符"main()",这个非常棒

grep "main()" . -r --include *.{php,html}

sed

sed 是一个精简的、非交互式的编辑器,它能执行与编辑vi相同的编辑任务。比如在一个流程中,我只想出去一个文件中所有的星号,这时一般不可能写脚本,这时sed就是个非常有效的方法

sed命令行格式为:

sed [-nefri] ‘command’ 输入文本/文件

常用选项:

-n : 取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来

-e : 进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑

-f : 指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作

-r : sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)

-i : 直接修改读取的文件内容,而不是由屏幕输出

常用命令:

a : 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c : 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行

d : 删除,因为是删除,所以 d 后面通常不接任何内容

i : 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)

p : 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用

s : 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。

常见用法:

替换文本中所有的星号为空,并不在屏幕输出

sed -i 's//\*/g' abc.txt

替换文本中第3个匹配上的pattern为other

sed 's/pattern/other/3' abc.txt

打印发生替换的行

sed -n 's/pattern/pattern/p' abc.txt

打印文本的10-20行

sed -n '10,20p' abc.txt

替换能匹配到for的行中的pattern字符串为空

sed '/for/ s//pattern/g' abc.txt

替换能匹配for到end的所有行中的pattern字符串为空

sed '/for/,/end/ s//pattern/g' abc.txt

删除空白行

sed '/^$/d' abc.txt

删除第2-10行

sed '2,10d' abc.txt

删除已The开头的的行

sed '/^The/'d abc.txt

直接修改在匹配到end的行的后面追加This is end

sed -i '/end/a\this is end' abc.txt

sort

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

sort命令格式:

sort 选项 参数

常用选项:

-u 它的作用很简单,就是在输出行中去除重复行,只保留其中的第一条。

-r sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。

-o 将排序后的结果写入原文件

-n 使用-n选项,来告诉sort,“要以数值来排序”!

-t和-k sort提供了-t选项,后面可以设定间隔符,指定了间隔符之后,就可以用-k来指定列数了

-c 检查文件是否已经排序

-b 忽略每行开头的空格字符,从第一个可见字符开始比较

-f 忽视大小写进行排序

常见用法:

简单的排序

sort abc.txt

对文本进行冒号分割后的第2列进行排序

sort -t: -k2 abc.txt

对文本进行冒号分割,然后先对第2列进行数值排序,如果相同在根据第3列进行数值排序

sort -t: -k2n -k3n abc.txt

如需排序后去重复,可以搭配uniq一起使用,如排序去重后并计数

sort abc.txt |uniq -c

排序后去重并显示重复项

sort abc.txt |uniq -d

排序后去重并显示不重复项

sort abc.txt |uniq -u

补充:shuf命令:随机排序文件

-n 最多显示多少行

-o 将随机排序后的输出写到一个文件中

例子:

shuf test.txt | head -n 20

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值