目 录CONTENT

文章目录

Shell 工具

Sakura
2023-10-01 / 0 评论 / 0 点赞 / 5 阅读 / 4544 字 / 正在检测是否收录...

一: cut

cut 命令从文件的每一行剪切字节、字 符和字段并将这些字节、字符和字段输出。

cut [选项参数] filename

# 默认分割符是制表符
# 选项
# -f 列号,提取第几列 f1-3 f2- f1,4
# -d 分隔符,按照指定分隔符分割列
  • 切割 Sakura.txt 第一列

vim Sakura.txt
Sakura LF
1 10
2 20
3 30

cut -f 1 -d " " Sakura.txt
Sakura
1
2
3
  • 切割 Sakura.txt 第一,二列

cut -f 1,2 -d " " Sakura.txt 
Sakura LF
1 10
2 20
3 30
  • 查找etc/passwd 目录下可以登录的用户 ( 用户默认的 shell 是 bash 就是可以登录的 )

# 1. 首先查找/etc/passwd文件中以bing/bash结尾的
# 2. 然后交个cut进行处理
grep "bin/bash$" /etc/passwd | cut -f1 -d:
  • 选取系统PATH变量值,第2个“:”开始后的所有路径:

echo $PATH | cut -f 2- -d:
/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

二: sed

sed 是一种流编辑器它一次处理一行内容

  1. 处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”

  2. 接着用sed命令处理缓冲区中的内容,

  3. 处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed [选项参数] 'command' filename

# 选项参数
# -e 直接在指令列模式上进行sed的动作编辑。
# -i 直接修改读取的档案内容

# 命令
# a 新增
# d 删除
# s 查找替换
  • 将 123 456插入 Sakura.txt 第二行

sed  '1a 123 456' Sakura.txt # 1a表示插入到第一行的最后面
Sakura LF
123 456
1 10
2 20
3 30 

如果向直接修改原来的文件加 -i

sed -i '1a 123 456' Sakura.txt

  • 删除 Sakura.txt 的第二行

sed "2d" Sakura.txt 
Sakura LF
1 10
2 20
3 30 
  • 删除 Sakura.txt 的指定字符的一行数据

sed "/3/d" Sakura.txt  # /3/d 表示查找3这个字符所在的一行,删除
Sakura LF
1 10
2 20
  • 查找替换 Sakura.txt 的指定字符的一行数据

sed "s/3/Sakura/" Sakura.txt # 查找所有3,替换成Sakura
sed "s/3/Sakura/g" Sakura.txt # 加g表示全局替换

Sakura LF
12Sakura 456
1 10
2 20
Sakura sdfa
  • 多个执行进行操作,使用-e

sed -e "3d"  -e "s/3/Sakura/" Sakura.txt # 先删除第三行,再进行查找替换
Sakura LF
12Sakura 456
2 20
Sakura sdfa

三: awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分 析处理

awk [选项参数] 'pattern1{action1} pattern2{action2}...' filename

# pattern: 表示AWK再数据中查找的内容,就是匹配模式
# action: 在找到匹配内容时所执行的一系列命令

# 选项参数
# -F 指定输入文件折分隔符
# -v 赋值一个用户定义变量
  • awk 的内置变量

# FILENAME 文件
# NR 已读的记录数
# NF 浏览记录的域的个数(切割后,列的个数)
# 1. 以:分割passwd文件,输出第一列和第二列,中间用-隔开
awk -F: '{print $1"-" $2}' passwd

# 2. 匹配root以及对应的对应的shell
awk -F: '/^root/ {print $1,"---",$7}' password

# 3. 匹配所偶用户以及默认的shell,并在最前面添加表头
# BEGINb:表示awk还没有读取文件之前先进行的操作
# END:整个文件读完之后进行的操作
awk -F:  'BEGIN{print "username,shell"}  {print $1,"---",$7}' passwd 

# 4. 所有用户UID+1
# 可以直接+1,也可以用-v定义变量然后+1
awk -F: '{print $3+1}' passwd # 
awk -v i=1  -F: '{print $3+i}' passwd 

四: sort

sort 命令是在Linux 里非常有用,它将文件进行排序,并将排序结果标准输出

sort (选项) (参数)

# 选项
# -n 依照数值的大小排序
# -r 以相反的顺序来排序
# -t 设置排序所用的分割字符
# -k 指定需要排序的列
# -f 忽略大小写
# -b 忽略每一行的空白部分
# 默认按字母的ascii码排
sort passwd

#
  • 对 passwd 文件先分割,再按照第三个字段排序

 sort -nt ":" -k 3 passwd  # 要加-n,因为默认是按照字符串排序的

  • 按照: 分割后的第三列倒序排序

sort -t : -nk 3 -r Test.txt 
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6 

0

评论区