-------------------------------------------------------------------------------------------

【cut命令】

  cut [选项] 文件

    -f 列号        ( --field 提取第几列 )

    -d 分隔符    ( --delimiter 按照指定分隔符分割列 )

  vi user.txt

  ( 行间分隔符为制表符Tab,cut的默认分割符是制表符 )

    

  

  

  提取系统的用户名和uid:

    cut -d ":" -f 1,3 /etc/passwd

  与grep组合使用:( 假设批量添加100个普通用户,或需要批量删除,那么需要提取普通用户的名字 )

    useradd user1

    useradd user2

    useradd user3

   ( 所有系统用户登录目录都是/sbin/nologin , 通过匹配/bin/bash 提取所有能登录的用户 , -v 取反选择不匹配root的行,再用cut匹配列提取用户名;把结果赋给变量,通过循环删除 )

    cat /etc/passwd | grep "/bin/bash" | grep -v "root" | cut -d ":" -f 1

  cut命令的局限:   

   ( 提取系统盘使用率 )

    df -h

    df -h | grep "sda3" | cut -f 5      # 只能匹配出行所有内容,因为分隔符是空格,不是Tab

    ​df -h | grep "sda3" | cut -d " " -f 5   # 无法匹配出想要的结果,因为分割符是严格匹配,如果实际内容分割符有两个空格,无法得出正确结果

  建议 man cut 查看系统手册,内容相对简单直观。

【printf】

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

  输出类型:

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

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

  %m.nf:输出浮点数。m和n是数字,分别指输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2是小数,6是整数。

  输出格式:

  \a   :    输出警告声音

  \b    :    输出退格键,也就是Backspace键

  \f    :    清除屏幕

  \n    :    换行

      \r    :    回车,也就是Enter键

      \t    :    水平输出退格键,也就是Tab键

  \v    :    垂直输出退格键,也就是Tab键

  printf %s 1 2 3 4 5 6    # 把123456当成一个字符串输出,没有格式

  printf %s %s %s 1 2 3 4 5 6    # 把%s%s123456当做字符串输出,没有格式

  printf '%s ' 1 2 3 4 5 6    # 把1 2 3 4 5 6当做字符串输出,输出格式为空格

  printf '%s\n' 1 2 3 4 5 6    # 输出格式为1个一行

  printf '%s %s %s' 1 2 3 4 5 6    # 把内容当做字符串三个为一组输出,1 2 34 5 6

  printf '%s %s %s\n' 1 2 3 4 5 6    # 输出格式为3个一行

  printf '%s' $(cat user.txt)    # 输出文本内容为字符串

  printf '%s\t %s\t %s\t %s\n' $(cat user.txt)  # 把文本内容格式化输出

  建议 man printf 查看可用的输出格式,和C的 printf 格式一样。

【awk】

  awk的标准输出命令是printf,默认分割符是空格或制表符。

  ( cut命令不能在分割符是空格的字符串中截取列,只能是制表符或具体的分割符。)

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

  ( 如果条件1,执行动作1;如果条件2,执行动作2 )

    条件(pattern):

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

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

    x>=10    大于等于

    x<=10    小于等于

    动作(Action)

      格式化输出

    流程控制语句

  

   awk '{printf $2 "\t" $3"\n"}' user.txt

   ( 大括号前面没有条件,直接执行命令,这里的printf 是awk的命令,$2 提取文件第二列,$3 提取文件第三列,$0 提取所有列 )

   df -h | awk '{print $1 "\t" $5 "\t" $6 "\t"}'

   ( 打印三列,这里的print是awk的命令,系统并没有print命令,所以只能在awk里使用;与printf的区别是:print会自动在行尾加换行符,而printf不会 )

   df -h | grep sda3 | awk '{print $5}' | cut -d '%' -f 1

   ( 提取系统已使用硬盘空间,可以把结果赋给一个变量,判断是否大于某个值,进行报警 )

  举一反三,查看剩余内存不包含单位M:free -h | grep Mem | awk '{print $4}' | cut -d 'M' -f 1

  grep 取行,awk 按条件取指定列,cut 按分隔符取指定列。

  2. BEGIN:先执行一条多余的动作

   awk 'BEGIN{print "this is a text"} {print $2 "\t" $3}' user.txt

  3. END:用于在所有命令处理完之后执行

  4. FS内置变量:用于定义分割符,如果需要手工定义分割符,一定要在分割符前面加BEGIN;

   awk 'BEGIN{FS=":"} END{print "this is end text"} {print $1 "\t" $3}' /etc/passwd

  理解语言思路,在命令行中要进行这么多功能,怎样合理的安排就怎样设计,这样看来语法是很简洁的。

  BEGIN、END也是条件。

  5. 关系运算符:

   cat user.txt | grep -v ID | awk '$4 > 18 {printf $2 "\n"}'

   ( user.txt中不包含ID这行,提取满足条件为第四列值大于18的第二列 )

【sed】

  sed是一种几乎包括在所有Unix平台的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。(可以放在管道符之后处理)

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

    sed命令有两种形式:sed [options] 'command' file(s);sed [options] -f scriptfile file(s)

  

  选项:

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

  sed -n '2p' user.txt    # 输出第二行

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

    -f    :  添加脚本文件的内容到执行的动作

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

  动作:(要加双引号)

  a\    :    追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用"\"代表数据未完结。

  c\    :    行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用"\"代表数据未完结。

  i\    :    插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用"\"代表数据未完结。

  d    :    删除,删除指定的行。

  p    :    打印,输出指定的行。

  s    :    字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)

  sed -n '2p' user.txt        # 输出第二行, p一般都要和-n使用,不加-n会显示出所有的行

  df -h | sed -n '2p'          # 管道符结果作为操作内容

  sed '2,4d' user.txt        # 删除文件的第2行到第4行,显示剩下的行,没有加 i 选项,不会更改文件内容

  sed '2a hello' user.txt      # 在第二行后追加hello,仅仅修改命令输出

  sed '2i hello \

    world' user.txt        # 在第二行前插入两行数据,仅仅修改命令输出

  sed '2c No person' user.txt    # 把第二行替换为No person

  sed '2s/M/F/g' user.txt      # 把第二行的M替换为F后输出

  

  sed -i '2s/M/F/g' user.txt  # 把替换后的结果写入文件

  sed -e 's/zhang//g ; s/wang//g' user.txt    # -e允许多条命令顺序执行,用分号隔开,s前面不加数字表示所有行

Link: http://www.cnblogs.com/farwish/p/4806018.html

@黑眼诗人 <www.farwish.com>

[Shell]字符截取命令:cut, printf, awk, sed的更多相关文章

  1. Shell 字符截取命令 Cut

    1.Cut 命令 # cut [选项] 文件名 选项 : -f 列号 提取第几列   -d 分隔符,按照指定分隔符分割列 2.例子 cut -f 1,4 -d ":" /etc/p ...

  2. cut printf awk sed grep笔记

    名称 作用 参数 实例 cut 截取某列,可指定分隔 -f 列号 -d 分隔符 cut -d ":" -f 1, 3 /etc/passwd 截取第一列和第三列 printf pr ...

  3. Shell 字符截取命令 awk

    awk命令# awk '条件1{动作1} 条件2{动作2}….' 文件名一般使用关系表达式作为条件动作:1.格式化输出 2.流程控制语句 处理cut命令无法截取空格的列 例子:截取出磁盘使用率 df ...

  4. Shell系列(20)- 字符截取命令cut

    前言 grep是按行提取:cut默认是通过制表符,按列提取,不能识别用空格作为分隔符 语法 cut [选项] [文件] 选项 -f :列号,截取哪几列数据,多个列号用逗号隔开:列与列之间默认用TAB制 ...

  5. 第10章 Shell编程(2)_字符截取命令

    2. 字符截取命令 2.1 cut字段提取命令(grep提取行,cut提取列) (1)cut命令:#cut [选项] 文件名 选项: -f 列号:提取第几列: -d 分隔符:按照指定分隔符分割列,默认 ...

  6. Linux命令集锦之·字符截取命令

    时间:2018-11-15 记录:byzqy 字符截取命令: cut.printf.awk.sed cut $ cut [选项] 文件名 选项: -f 列号:提取第几列: -d 分隔符:按照指定分隔符 ...

  7. shell字符截取

    shell字符截取 截取文本中以vm开头的单词 grep -o vm.* text | cut -d' '  -f1 截取活动主机

  8. 字符截取:cut,格式化输出:printf,字符截取:awk,文件或命令输出编辑:sed

    cut 选项 文件名 -f 列号 提取第几列 -d 分隔符 指定分隔符把行分成多列 不能以空格为分隔符. [root@localhost ~]# cat testfile no. name sex s ...

  9. Shell系列(22)- 字符截取命令awk

    简介 awk是一个数据处理工具,相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个"字段"来处理 awk的流程是依次读取每一行数据,读取完一行数据后,进行条件判断 ...

随机推荐

  1. C++中默认构造函数中数据成员的初始化

    构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...

  2. java 线程的让步

    //线程的让步 // //线程 class xc1 implements Runnable{ public void run(){ for(int i=1;i<=30;i++){ System. ...

  3. 自制公众平台Web Api(微信)

    最近一段时间感觉没什么东西可以分享给大家,又由于手上项目比较赶,不太更新博客了,今天趁着生病闲下来的时间分享一些项目中的东西给大家. 公众平台 提起公众平台当下最流行的莫过于腾讯的微信了,当然还有易信 ...

  4. CPA

    CPA.CPS.CPM.CPT.CPC 是什么 网络营销之所以越来越受到重视一个主要的原因就是因为“精准”.相比较传统媒体的陈旧广告形式,网络营销能为广告主带来更为确切的效果与回报,更有传统媒体所没有 ...

  5. Unity3D 双摇杆 c# JoyStick 实现自己的双摇杆

    转载请声明: http://www.cnblogs.com/ADaii/p/3859520.html Untiy3D 官方摇杆脚本只能完成一个摇杆,要实现双摇杆比较费劲 现在我吧我废了一通宵的结果共享 ...

  6. Mono addin 学习笔记 1

    Mono Addin是一个开源的插件框架,其主要支持的特性如下: The main features of Mono.Addins are: Supports descriptions of add- ...

  7. iframe中的js

    iframe之间的js是不能相互访问的,iframe和父窗体之间的js也是不能相互访问的

  8. git patch

    http://www.cnblogs.com/y041039/articles/2411600.html

  9. Oracle10G 连接11G数据库,出现ORA -1017用户名/口令无效; 登录被拒绝 的问题

    一.出现症状 1.使用sqlplus连接正常 2.C#使用10g的ODP.NET连接时,报上面的错误 二.原因 1.Oracle11G之前密码是不区分大小写的,从11G开始默认密码区分大小写 2.使用 ...

  10. python中的装饰器

    一.什么是装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能 ...