shell脚本编程学习笔记6——字符串截取命令1,cut命令 [root@localhost ~]# cut [选项] 文件名
-f 列号,表示提取第几列
-d 分隔符,按照指定的分隔符分割列
注意:默认分隔符是制表符
实例:
cut -f 2 filename 按照制表符分隔的,提取第二列
cut -f 2,3 filename 提取第二列和第三列
cut -d ":" -f 1,3 按照:为分隔符提取1和3列
cut局限性:
不能提取分隔不是很明确的列,所以需要awk来提取。cut比较简单2,printf命令 [root@li1079-128 ~]# printf '输出类型输出格式' 输出内容
输出类型:
%ns 输出字符串,n是数字指代输出几个字符
%ni 输出整数,n是数字指代输出几个数字
%m.nf 输出浮点数,m和n代表整数位书和小数位数,%8.2f 总共8位,小数点后两位
输出格式:
\a 输出警告音
\b 输出退格键,backspace
\f 清除屏幕
\n 换行
\t 水平输出退格 tab
\r 回车
\v 垂直输出退格 tab
注意:awk命令的输出中,支持print和printf,print会在每个输出之后自动加入换行符
printf标准格式的输出命令,不带换行符。3,awk [root@li1079-128 ~]# awk 'case1{action1}case2{action2}...'
case:
关系表达式作为判断条件
action
格式化输出,流程控制等
实例:
[root@li1079-128 ~]# df -h | awk '{printf $1"\t"$3"\n"}'
BEGIN{执行之前定义}
END{执行之后定义}
实例:# cat /etc/passwd | grep "/bin/bash" | \
awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
以上例子用了BEGIN定义了分隔符
关系运算
实例:# cat student.txt | grep -v Name | \
awk '$6 >= 87 {printf $2 "\n" }'4,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 '2,4d' student.txt # 删除第二行到第四行的数据 ,但不修改文 件本身
[root@localhost ~]# sed '2a hello' student.txt # 在第二行后 追 加 hello
[root@localhost ~]# sed '2i hello
\ world' student.txt # 在第二行前插入两行数据
# sed '2c No such person‘ student.txt # 数据替换
# 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 ”替换为空 |