文章目录
字符截取命令
1. cut 命令
1.1 cut 命令介绍
cut [选项] 文件名
选项:
-f 列号: 提取第几列
-d 分隔符: 按照指定分隔符分割列
案例1:
vi student.txt
ID Name gender Mark
1 Liming M 86
2 SC M 90
3 Gao M 83
制表符
提取第二列
cut -f 2 student.txt
提取第二、三列
cut -f 2,3 student.txt
cut -d ":" -f 1,3 student.txt
案例2:
提取出新的用户,排除root用户
cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
1.2 cut 命令局限
df -h | grep "sda5" | cut -f 5
无法提取出sda5这一行的第5列,因为空格不是制表符。
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键
案例:
printf %s 1 2 3 4 5 6
> 123456
printf %s %s %s 1 2 3 4 5 6
>%s%s123456
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
> 1 2 3
> 4 5 6
打印文件内容
printf '%s' $(cat student.txt)
调整输出格式
printf '%s\t %s\t %s\t %s\t %s\t %s\n' $(cat student.txt)
在 awk 命令的输出中支持print和printf命令。
- print:print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
- printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符。
3. awk 命令
# awk '条件1{动作1}条件2{动作2}...'
条件(Pattern):
一般使用关系表达式作为条件
x>10 判断变量 x 是否大于10
x>=10 大于等于
x<=10 小于等于
动作(Action):
格式化输出
流程控制语句
案例:
文档是一个成绩表,ID Sname PHP Java C Average
没有设条件, 打印第二列和第六列
# awk '{printf $2 "\t" $6 "\n"}' student.txt
# df -h | awk '{print $1 "\t" $3}'
在awk中 print 和 printf 都可以使用,print会自动加入换行符。
3.1 BEGIN
# awk 'BEGIN {printf "This is a transcript \n" }
{printf $2 "\t" $6 "\n"}' student.txt
在动作之前先BEGIN之后的动作。
3.2 FS 内置变量
FS 分隔符
读取第一条数据之前,第一条数据分割。
cat /etc/passwd | grep "/bin/bash" | \
awk 'BEGIN {FS=":"}{printf $1 "\t" $3 "\n"}'
3.3 END
# awk 'END{printf "The End \n"}
{printf $2 "\t" $6 "\n"}' student.txt
3.4 关系运算符
# cat student.txt | grep -v Name | \
awk '$6>=87 {printf $2 "\n" }'
4. sed 命令
sed 是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
vim只能修改文件。不可以把命令的结果进行修改。
sed不光可以修改文件,可以用管道符进行接收,直接修改命令的结果。
sed [选项] '[动作]' 文件名
选项:
-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
-e:允许对输入数据应用多条sed命令编辑
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。
动作:
a\: 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
c\: 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
i\: 插入,在当前行前面插入一行或多行。“\"代表数据未完结。
d: 删除,删除指定的行。
p: 打印,输出指定的行。
s: 字符替换,用一个字符串替换另外一个字符串。格式为”行范围s/旧字符/新字串/g“(和vim中的替换格式类似)
行数据操作
sed '2p' student.txt
查看文件的第二行,并输出全部行
sed -n '2p' student.txt
只输出第二行
sed '2,4d' student.txt
删除第二行到第四行的数据,但不能修改文件本身
sed '2i hello \ world' student.txt
在第二行前插入两行数据
sed '2c No such person' student.txt
替换第二行数据
df -h | sed -n '2p'
字符串替换
sed 's/旧字符穿/新字串/g' 文件名
sed '3s/74/99/g' student.txt
在第三行中,把74换成99
sed -i '3s/74/99/g' student.txt
sed操作的数据直接写入文件
sed -e 's/Liming//g;s/Gao//g' student.txt
同时把‘Liming”和“Gao”替换为空。
字符处理命令
1. 排序命令sort
sort [选项] 文件名
选项:
-f: 忽略大小写
-n: 以数值型进行排序,默认使用字符串型排序
-r: 反向排序
-t: 指定分隔符,默认分隔符是制表符
-k n[,m]: 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
案例:
sort /etc/passwd
排序用户信息文件
sort -r /etc/passwd
反向排序
sort -t ": -k 3,3 /etc/passwd
指定分隔符是“:”,用第三字段开头,第三字段结尾排序。就是用第三字段排序。
sort -n -t ":" -k 3,3 /etc/passwd
2. 统计命令
wc [选项] 文件名
选项:
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数
wc /etc/passwd
wc -l /etc/passwd