博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux _ Day8 Shell编程之字符截取命令
阅读量:5329 次
发布时间:2019-06-14

本文共 3516 字,大约阅读时间需要 11 分钟。

一、字符截取命令

1、cut 字段截取命令

[root@localhost ~]# cut  [选项]  文件名

选项:

  -f   列号:  提取第几列

  -d  分隔符:   按照指定分隔符分割列(默认分隔符是制表符Tab键)

cut 命令的局限性

 df  -h  |  cut -d  " "  -f  1,3

 # df 命令,查看分区的使用状况

因为文件内容中的分隔符是空格,cut命令是能截取第一行,他第三列是空格,不是数据。

2、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键

[root@localhost ~]# printf  %s  1  2  3  4  5  6

[root@localhost ~]# printf  %s  %s  %s  1  2  3  4  5  6

[root@localhost ~]# printf  '%s  %s  %s '  1  2  3  4  5  6

[root@localhost ~]# printf  '%s  %s  %s\n '   1  2  3  4  5  6

 注:单引号不能省略。

[root@localhost ~]# printf  '%s'  $(cat  student.txt)

# 不调整输出格式

[root@localhost ~]# printf  '%s\t  %s\t  %s\t  %s\n'   $(cat  student.txt)

# 调整格式输出

注:printf 不支持数据流

3、awk 命令

[root@localhost ~]# awk  ' 条件1{动作1}  条件2{动作2}……'   文件名

条件(Patterm):

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

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

  x >= 10 大于等于

  x <= 10 大于等于

动作(Action):(高级功能,暂时不学)

  格式化输出

  流程控制语句

[root@localhost ~]# awk ' {printf  $2  "\t"  $4  "\n" }'  student.txt

注:有条件就先判断条件再执行动作,没有条件就位每一行都执行同样的动作

print 命令,相当于printf 省略后面的 \n

注:awk  命令,先读取数据,然后再按照条件截取。

BEGIN (条件命令)

[root@localhost ~]# awk  ‘ BEGIN { print  " This  is  a  transcript " } {print  $2  " \t "  $4  " \n " }’  student.txt

注:只要命令执行之前满足 BEGIN 条件,就答应 print  " This  is  a  transcript

END(条件命令)

[root@localhost ~]# awk  ‘ END { print  " end " } {print  $2  " \t "  $4  " \n " }’  student.txt

FS内置变量

[root@localhost ~]# cat  /etc/passwd  |  grep  "/bin/bash"  |  \awk  'BEGIN  {FS=":"} {print  $1 "\t"  $3  "\n"}'

标准用法:  'BEGIN  {FS=":"}

关系运算符

[root@localhost ~]# cat  student.txt  |  grep  -v  Name  |  \awk  '$4  >=  70' {printf  $2  "\n"}'

字符替换命令 sed 命令

 vi 只能修改文件,需要人工输入;sed 替换文件里面的数据,适合脚本使用。

sed 是一种几乎包括在所有UNIX平台(包括 Linux)的轻量级编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。

[root@localhost ~]# sed  [选项]  ‘[动作]’  文件名

选项:

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

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

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

动作:

  a  :  追加,在当前行后添加一行或多行

  c  :  行替换,用 c 后面的字符串替换原数据行

  i   :  插入,在当前行插入一行或多行。d:删除,删除指定的行

  p  :  打印输出指定的行

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

行数据操作

[root@localhost ~]# sed  ‘2p’  student.txt

# 查看文件的第二行

[root@localhost ~]# sed  -n  '2p'  student.txt

[root@localhost ~]# sed  '2d'  student.txt

# 删除第二行的数据,但不修改文件本身

[root@localhost ~]# sed  '2,4d'  student.txt

# 删除第二行到第四行的数据,但不修改文件本身

[root@localhost ~]# sed  '2a cjj like Linux '  student.txt

# 在第二行后面追加一行数据

[root@localhost ~]# sed  '2i cjj like Linux '  student.txt

# 在第二行前面插入一行数据

[root@localhost ~]# sed  '2c cjj like Linux '  student.txt

# 数据替换

 

字符串替换

[root@localhost ~]# sed  's/ 旧字符串/新字符串/g   文件名

 

[root@localhost ~]# sed  '3s/60/99/g '  student.txt

# 在第三行中,把60换成99

[root@localhost ~]# sed  -i  '3s/60/99/g '  student.txt

# 确定修改并保存,直接写入文件

注:3s 代表第三行70,s 代表只有一行有要替换的数据70,g 代表有多个70都要替换

[root@localhost ~]# sed  -e  's/fengj/ /g ; s/cang/ /g' sttudent.txt

# -e 表示可以同时执行多条命令,同时把“fengj” 和 "cnag" 替换为空。

二、字符处理命令

1、 排序命令

[root@localhost ~]# sort  [选项]  文件名

选项:

  -f  :  忽略大小写

  -n :  以数值型进行排序,默认使用字符串型排序

  -r  :  反向排序

  -t  :  指定分隔符,默认分隔符是制表符

  -k  “n,m”  :  按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)

[root@localhost ~]# sort  /etc/passwd

注:什么都不指定,按照字母顺序排列

 

[root@localhost ~]# -r  sort  /etc/passwd  (取反)

[root@localhost ~]# sort  -n  -t  ":"  -k  “3,3”  /etc/passwd

# 指定分隔符是“:” 用第三字段开头,第三字段结尾排序,就是只用第三字段排序

注:数字排序加上 -n 否则是按照字符串进行排序

2、统计命令 wc

[root@localhost ~]# wc  [选项]  文件名

选项:

  -l    :  只统计行数

  -w  :  只统计单词数

  -m :  只统计字符数

 

转载于:https://www.cnblogs.com/chuijingjing/articles/8425283.html

你可能感兴趣的文章
C# 网页自动填表自动登录 .
查看>>
netfilter 和 iptables
查看>>
洛谷P1005 矩阵取数游戏
查看>>
Django ORM操作
查看>>
2012年最佳30款免费 WordPress 主题
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
HDU-1150 Machine Schedule 二分图匹配
查看>>
单例模式的5种写法
查看>>
安卓问题报告小记(四):Some projects cannot be imported because they already exist in the workspace...
查看>>
显示地图
查看>>
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于cocoa 运行时runtime
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
asp.net 写入excel时,不能更新。数据库或对象为只读。
查看>>
linux清空日志文件内容 (转)
查看>>
jsp中对jstl一些标签的引用方式
查看>>
mkdir命令(转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>