比较linux下各种流编辑器的用法

假设你已经会用所有的流编辑器

统计下流编辑器

1、tr

      转换字符

      替换:可以使用字符集的形式。如tr [a-z] [A-Z] 或者 tr a-z A-Z

      压缩:-s   如echo “you are        a    man   ”|tr -s ' ' ' '   结果you are a man

      删除:-d   如echo "you     are    a man"|  tr -d ' '结果youareaman

2、cut

      剪切一段字符或字节

      可以使用-c,-b,-f来指定分割字符,字节和域       

3、paste

     粘贴,也就是合并文件用的

     使用制表符来合并多个文件对应的行,也可以使用 -d 指定合并符

     实例:

     默认制表符

     paste p3.txt p2.txt p1.txt

     指定

     paste -d ‘*‘ p3.txt p2.txt p1.txt

     so,也不需要和其他的对比了,其他都是拆分,而paste是合并。

4、sed

      功能很强大,替换删除打印都可以

      侧重整行

5、awk

      功能牛叉

6、grep

      g (globally) search for a re (regular expression ) and p (print ) the results.

实例:

1、字符替换

     在字符替换方面,tr还是比较好用的。

     如:“avcd”   替换成"AVCD"

     echo "avcd" | tr '[a-z]' '[A-Z]'

     sed,awk,grep更擅长处理字符串了

     echo “avcd” | sed 's/[a-z]/[A-Z]/g'
     输出结果是:[A-Z][A-Z][A-Z][A-Z]

2、字符串替换

      字符串操作的话,tr就得良弓藏了

      将string 替换成int

      echo "stringstringstring    string" | sed 's/string/int/g'    

awk,sed,grep,cut都是以行为单位来存储

3、我想操作指定位置的字符,字节

      那么cut就当仁不让了。

      $cat size.txt

      hello world
      你好,伟大的程序员先生!
      $cut -b 1-3 < size.txt 
      hel
      你

      $cut -b 1-2 < size.txt

      he
     
      $cut -b 1-2 < size.txt |sed -n l

      he$
      \344\275$ 
      其实第二行是有内容的。

      $cut -b 1-2,7-8 < size.txt |sed -n l
      hewo$
      \344\275\357\274$
      $cut -c 1-3 size.txt
      hel
      你
      需要注意的是在ubuntu中不知到为什么-c和-b没区别

4、匹配字符串,然后输出

文本处理中的一个很重的一部分,sed,grep,awk,cut都可以胜任。

$cat size.txt

1:2:3
1:2:3
4:5:6
2:9:10
ni:hao:ni:d
ow:ds:dfg:dfs

1、我想得到第三列的数据

cut:

$cut -d ':' -f 3 size.txt

3
3
6
10
ni
dfg

sed:

$sed 's/.*:.*:\(.*\).*/\1/' < size.txt
3
3
6
10
d
dfs

注意:sed是贪婪匹配,不支持非贪婪匹配,而且匹配起来也麻烦

grep:

使用正则表达式搜索文本,并把匹配的行打印出来,可以看出grep主要是匹配然后输出整行,显然对此也无能为力了。

awk:

非常强大,用在这个里面有点屈才了。

awk -F: '{print $3}' < size.txt

跟cut比,awk可以指定多个分割符

$cat size.txt

1:;2:;3
1:;2:;3
4:;5;:6
2:;9:;10
ni:;hao:;ni:d
ow:;ds:;dfg:dfs
sdjh:da:;sfjh

$awk -F '[:;]' '{print $3}' < size.txt |sed -n l

2$
2$
5$
9$
hao$
ds$
$
对于这样的需求,cut只能靠边当小弟了

2、搜索某一行是否存在某个string

显然grep,sed,awk都是可以的

简单的话就用grep,因为grep支持非贪婪匹配

$cat size.txt

aaaadsdsaaaaaadsa
aaaaaaddf
fdsgaaadf
afgfssaaghg

我想匹配某一行有一个或两个a的行

$sed -n '/[^a]aa\?[^a]/p' < size.txt

afgfssaaghg
sdafdhh

$grep -E '[^a]a{1,2}[^a]' < size.txt
感觉还是grep对正则支持的很好

3、搜索一个有固定格式文件的某一列是否存在string,

显然awk很easy,而用sed的话得先搜索到,然后在使用正则替换,会很麻烦。

就这样吧,具体的还的认真学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值