liunx----cut和tee命令(文本操作)

cut命令详解
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

一、基本语法
cut [选项参数] filename
说明:默认分隔符是制表符。

选项与参数:

-d:分隔符,按照指定分隔符分割列。与 -f 一起使用

-f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思(列号,提取第几列)

-c:以字符 (characters) 的单位取出固定字符区间

-b:以字节为单位进行分割

二、实操案例
准备数据

[root@jiangnan data]$ touch cut.txt
[root@jiangnan data]$ vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le

切割cut.txt第一列
[root@jiangnan data]# cut -d ' ' -f 1 cut.txt
dong
guan
wo
lai
le
[root@jiangnan data]#

注意双引号里面是空格,因为要以空格作为分隔符。

切割cut.txt第二、三列
[root@jiangnan data]# cut -d ' ' -f 2,3 cut.txt
shen
zhen
wo
lai
le
[root@jiangnan data]#

注意后面三个的前面是有一个空格的,因为我们在准备数据的时候就写了两个空格。

切割cut.txt的第5-8个字符
[root@jiangnan data]# cut -c 5-8 cut.txt
she
zhe
wo
lai
le
[root@jiangnan data]#

切割cut.txt的第2,4,6个字节
[root@jiangnan data]# cut -b 2,4,6 cut.txt
ogs
unz
o o
a l
e e
[root@jiangnan data]#

可以看出纯英文状态下字节和字符等效。

切割cut.txt的第6个字节以前的内容
[root@jiangnan data]# cut -b -6 cut.txt
dong s
guan z
wo wo
lai l
le le
[root@jiangnan data]#

切割字符串中的汉字
[root@jiangnan data]# echo "我爱你中国" | cut -c 2,3
爱你
[root@jiangnan data]# echo "我爱你中国" | cut -b 2,3

[root@jiangnan data]# echo "我 爱 你 中 国" | cut -d ' ' -f -2
我 爱
[root@jiangnan data]#

对于汉字的切割最好使用-c(字符),字节(-b)无法满足要求。

在cut.txt文件中切割出guan
[root@jiangnan data]# cat cut.txt | grep "guan" | cut -d " " -f 1
guan
[root@jiangnan data]#

选取系统PATH变量值,第1个“:”开始后的所有路径:
[root@jiangnan data]# echo $PATH
/usr/local/java/jdk1.8.0_161/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@jiangnan data]# echo $PATH | cut -d: -f 2-
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@jiangnan data]#

三、cut有哪些缺陷和不足
如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容。
————————————————

 

tee命令:

tee命令主要被用来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件,下面是tee的man 信息

read from standard input and write to standard output and files

下面我们通过几个应用场景来熟悉tee命令。

场景1: 如何使用tee命令

tee命令格式是:

tee [OPTION]... [FILE]...

从man文件的定义了解 tee从标准输入流读取数据,所以这里我们使用一个简单的命令产生输出流作为tee的输入流,这里就选用ping命令,

  1.  
    [mysql@localhost ~]$ ping baidu.com
  2.  
    PING baidu.com (220.181.57.216) 56(84) bytes of data.
  3.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=1 ttl=128 time=30.1 ms
  4.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=2 ttl=128 time=33.1 ms
  5.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=3 ttl=128 time=31.9 ms
  6.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=4 ttl=128 time=30.9 ms
  7.  
    ...

现在我们希望输出到控制台的同时,将输出到控制台的内容保存到另外的文件,以便其他的用途,那么这时候tee命令就可以发挥作用了,

  1.  
    [mysql@localhost ~]$ ping baidu.com | tee ping-baidu.log #输出到控制台的同时,将内容保存到ping-baidu.log文件中
  2.  
    PING baidu.com (220.181.57.216) 56(84) bytes of data.
  3.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=1 ttl=128 time=30.6 ms
  4.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=2 ttl=128 time=30.5 ms
  5.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=3 ttl=128 time=30.2 ms
  6.  
    ^C[mysql@localhost ~]$ cat ping-baidu.log  #检查文件内容是否和输出一致
  7.  
    PING baidu.com (220.181.57.216) 56(84) bytes of data.
  8.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=1 ttl=128 time=30.6 ms
  9.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=2 ttl=128 time=30.5 ms
  10.  
    64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=3 ttl=128 time=30.2 ms

场景2: 如何向文件里面追加内容?

上面的操作中,输出到ping-baidu.log,如果这个文件存在,则先将文件里面的内容全部清除,然后再输入内容,对于某些场景下这种方式则不适合,我们希望每次的输出是追加到文件里面,这时我们可以通过-a参数来指定.

ping baidu.com | tee -a ping-baidu.log

 

场景3: 如何同时输出到多个文件?

直接在tee命令后面追加待输入的文件名即可,具体格式是:

ping baidu.com | tee ping.log ping-baidu.log

在这里插入图片描述

场景4: 如何将tee命令的输出重定向为另一个命令的输入流

直接在tee命令后面接| 和下一个命令,就是按照pipeline的方式来弄

场景5: 通过使用tee命令来提高写入文件的权限等级

在实际操作liunx服务器的时候,我们在配置某些文件的时候,配置完了,保存的时候,发现自己当前的用户不具有保存文件的文件,这时候内心是十分奔溃的,有没有解决的方式呢?这时候tee命令来解救我们的烦恼。

具体的操作就是在文件保存的时候输入:w !sudo tee %,这时候vi会提醒你输入sudo操作的密码,输入正确之后,文件就保存了,此时你可以安心的:q!退出文件了。

场景6: 如何让tee忽略中断事件

-i参数能够让tee忽略中断事件(SIGINT)

ping baidu.com | tee -i ping.log

posted @ 2024-03-26 13:46  挖坑达人  阅读(25)  评论(0)    收藏  举报