shell字符截取命令

1.cut字段提取命令

2.printf命令

3.awk命令

4.sed命令

cut命令:

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

选项:

-f 列号 :提取第几列

-d 分隔符 :按照指定分隔符分割列,默认为制表符分割

eg:

获取/etc/passwd中第1列和3列值,分割符为:

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

与命令一起使用,用管道符隔开

[root@localhost ~]# grep “/bin/bash” /etc/passwd |grep -v "root" | cut -f 1 -d ":"

printf命令

printf '输出类型'  输出内容

输出类型:

  • %ns : 输出字符串。n是指代输出几个字符;
  • %ni : 输出整数。n是指代输出几个数字
  • %m.nf:输出浮点数。m和n是数字,指代输出的位数和小数位数;如%8.2f代表共输出8位数,其中2位是小数,6位是整数

输出格式:

  •  \a :输出警告声音
  •  \b:输出退格键 ,也就是backspace键
  •  \f :清除屏幕
  • \n :换行
  • \r : 回车
  • \t :水平输出退格键,也就是tab键
  • \v :垂直输出退格键

eg:

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

结果打印为:123456

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

结果打印为:1 2 34 5 6

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

1         2          3

4         5          6

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

条件:

  • 一般使用关系表达式作为条件
  • x >10 判断变量X是否大于10

动作:

  •  格式化输出
  • 流程控制语句

eg:获取student.txt文件中第2列和第4列数据

awk  '{print $2 "\t" $4 "\n"}'  student.txt

与系统命令一起使用:df -h | awk '{print $1 "\t" $3}'

与BEGIN一起使用  : awk ’BEGIN{print "首行输出的内容"} {print $2 "\t" $4 }‘ student.txt

与end一起使用: awk ’END{printf "结尾输出的内容"} {print $2 "\t" $4}‘ student.txt

分割符不是空格和制表符时,需要用FS指定分割符

FS内置变量:cat /etc/passwd |grep "/bin/bash" | awk 'BEGIN {FS=":"}{print $1 "\t" $3}'

注意:要加上BEGIN,否则第一行的数据会输出整行

关系运算符

cat student.txt  | awk '$4 >=70 {print $2 }'

sed命令

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

sed [选项] ’[动作]‘ 文件名

选项:

  • -n :一般sed命令会把文件所有数据都输出到屏幕,如果加入此选择则只会把经过sed命令处理的行输出到屏幕。
  • -e 允许对输入数据应用多条sed命令编辑
  • -i :用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作:

  • a :追加,在当前行后添加一行或多行
  • c : 行替换,用c 后面的字符串替换原数据行
  • i :插入,在当期行前插入一行或多行。 d : 删除,删除指定的行
  • p : 打印,输出指定的行
  • s 字符串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字符串/新字符串/g”

行数据操作:

#查看文件的第二行(注意需要加选项参数 -n,否则会输出整个文件内容)

sed -n '2p' student.txt 

#删除文件的第二行内容

sed '2d' student.txt

#删除第二行到第四行内容

sed '2,4d' student.txt

#在第二行后追加内容

sed '2a 追加的内容' student.txt

#在第二行前插入两行数据

sed '2i 插入内容' student.txt

#数据替换:替换第二行内容

sed '2c 替换的内容'  student.txt 

#字符串替换:将第三行中xiaohua替换xiaoming

sed '3s/xiaohua/xiaoming/g'  student.txt

#sed操作的数据直接写入文件,使用-i选项

sed -i '3s/xiaohua/xiaoming/g' student.txt

#同时把‘xiaohua’ 和‘xiaoming’替换为空,使用-e选项

sed -e 's/xiaohua//g;s/xiaoming//g' student.txt

你可能感兴趣的:(linux)