Linux之字符截取命令

1.cut命令

    cut[选项] 文件名

          选项:   -f  列号:提取第几列      -d:分隔符:按照指定分隔符分割列

       Linux之字符截取命令

                  注意:上述的a.txt之间空格要用\t制表符

     例1: cut -d ":" -f 1,3 a.txt   #将a.txt文本中以:分隔符分隔后的文本的第一列和第三列提取出来

  Linux之字符截取命令

 例2:  通过管道符输入文件内容:

Linux之字符截取命令

例3:若空格为分隔符,则必须要用\t(tab键)

   Linux之字符截取命令

2.printf命令:

      printf   ‘输出类型输出格式'     输出内容

          输出类型:

                         %ns    输出字符串,n是数字指代输出几个字符

                         %ni:  输出整数 。n是数字指代输出几个数字

                          %m.nf

          输出格式:

                          \a:输出警告声音

                          \b:输出 退格键

                          \f:清除屏幕

                         \n:换行

                         \r:回车

                         \t:水平退格

                         \v:垂直退格

   例:

       Linux之字符截取命令

   注意:printf  是循环输出的,直到把所有的字符串都输出

         Linux之字符截取命令

     Linux之字符截取命令

3.awk命令:

     awk '条件1{动作1}条件2{动作2}......’   文件名

               条件:

                        一般使用关系表达式作为条件

                              x>10     判断变量是否大于10

                 动作:

                          格式化输出

                            流程控制语句

Linux之字符截取命令

  注意:a.txt先把第一行给了printf,然后把每一列分别给了$1,$2......;$0为一行,\t需要加引号,否则要出错

Linux之字符截取命令

    注意:awk实现了cut缺点,可以用空格分开

   Linux之字符截取命令

    注意:该例结合了awk 和cut 命令


FS:内置对象

   Linux之字符截取命令

      内置对象表

Linux之字符截取命令

1、常用操作

[[email protected] ~]$ awk '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

/^root/ 为选择表达式,$0代表是逐行

          

2、设置字段分隔符号(FS使用方法)

[[email protected] ~]$ awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd
root /bin/bash

 

FS为字段分隔符,可以自己设置,默认是空格,因为passwd里面是”:”分隔,所以需要修改默认分隔符。NF是字段总数,$0代表当前行记录,$1-$n是当前行,各个字段对应值。

           

3、记录条数(NR,FNR使用方法)

[[email protected] ~]$ awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd
1 root /bin/bash
2 bin /sbin/nologin
3 daemon /sbin/nologin
4 adm /sbin/nologin
5 lp /sbin/nologin
6 sync /bin/sync
7 shutdown /sbin/shutdown
……

NR得到当前记录所在行

        

4、设置输出字段分隔符(OFS使用方法)

[[email protected] ~]$ awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd
1^^root^^/bin/bash

 

OFS设置默认字段分隔符

         

5、设置输出行记录分隔符(ORS使用方法)

 

[[email protected] ~]$ awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' /etc/passwd      
1 root /bin/bash^^2 bin /sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin

 

从上面看,ORS默认是换行符,这里修改为:”^^”,所有行之间用”^^”分隔了。

  4.sed命令

      它是一种几乎所有unix平台的轻量 级流编辑器。主要作用是将数据进行选取,替换,删除,新 增的命令

     sed [选项]   '[动作]'   文件名

       选项:

                -n:一般sed命令会把所有数据 都输出 到屏幕 ,如果 加入此选择,则只会把经过sed命令处理的行输出 到屏幕

                -e:允许对输入数据应用 多条sed命令编辑

                -i:用sed的修改结果直接修改读取数据 的文件,而不是由屏幕输出 。

Linux之字符截取命令 

行输出:

Linux之字符截取命令

删除指定的行:

Linux之字符截取命令

此时不会真正删除a.txt中的第二行,第三和地,因为没有加-i.

行修改:

     sed '2a hello' a.txt    在第二行后追加hell0

     sed '2i hello' a.txt   在第二行之前加入hello

     sed '2c No such person ‘  a.txt   数据替换

     sed 's/旧字串/新字串/g’  文件名

      sed '3s/74/99/g'   a.txt   在第三行中,把74换成99 

     sed -i '3s/74/99/g' a.txt   操作的数据直接写入文件