一、字符截取命令
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 : 只统计字符数