test文件判断命令
命令功能:检测文件类型和比较运算
命令用法
test [命令选项] 表达式
命令选项
-d 检查文件是否存在且为目录
-e 检查文件是否存在
-f 检查文件是否存在且为文件
-r 检查文件是否存在且可读
-s 检查文件是否存在且不为空
-w 检查文件是否存在且可写
-x 检查文件是否存在且可执行
-O 检查文件是否存在并且被当前用户拥有
-G 检查文件是否存在并且默认组为当前用户组
-nt file1 -nt file2 检查file1是否比file2新
-ot file1 -ot file2 检查file1是否比file2旧
-ef file1 -ef file2 检查file1是否与file2是同一个文件,判定依据的是i节点
以上只列出部分命令选项,详细的可以通过:man test获得。
数组
# 创建数组
arr=(1 2 3 4 5)
# 通过下标修改值
arr[0]="A"
# 显示所有的值
echo ${arr[*]}
# 获取元素的数量
echo "元素的数量:"${#arr[*]}
# 获取数组元素的索引
echo ${!arr[@]}
# 切片:获取部分元素
echo "获取2~4的元素:"${arr[@]:2:3}
# 遍历循环所有的值
for i in ${arr[*]}
do
echo $i
done
# 创建关联数组
declare -A asso_array1
declare -A asso_array2
declare -A asso_array3
# 一次赋一个值
数组名[索引]=变量值
[root@zuolaoshi ~]# asso_array1[linux]=one
[root@zuolaoshi ~]# asso_array1[java]=two
[root@zuolaoshi ~]# asso_array1[php]=three
# 一次赋多个值
[root@zuolaoshi ~]# asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss zhang")
# 查看关联数组
[root@zuolaoshi ~]# declare -A
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss zhang" )'
# 管理数组取值
[root@zuolaoshi ~]# echo ${asso_array1[linux]}
one
[root@zuolaoshi ~]# echo ${asso_array1[php]}
three
[root@zuolaoshi ~]# echo ${asso_array1[*]}
three two one
[root@zuolaoshi ~]# echo ${!asso_array1[*]}
php java linux
[root@zuolaoshi ~]# echo ${#asso_array1[*]}
3
[root@zuolaoshi ~]# echo ${#asso_array2[*]}
4
[root@zuolaoshi ~]# echo ${!asso_array2[*]}
name3 name2 name1 name4
常用数据处理命令
-
数据检索命令
行检索:grep egrep 字符串检索:cut tr
-
数据处理命令
数据排序:sort 数据去重: uniq
文本数据合并: paste 数据输出: tee 数据处理: xargs
grep:负责从数据源中检索对应的字符串,行过滤
-
grep -i root passwd 忽略大小写匹配包含root的行
-
grep -w ftp passwd 精确匹配ftp单词
-
grep -wo ftp passwd 打印匹配到的关键字ftp
-
grep -n root passwd 打印匹配到root关键字的行好
-
grep -ni root passwd 忽略大小写匹配统计包含关键字root的行
-
grep -nic root passwd 忽略大小写匹配统计包含关键字root的行数
-
grep -i ^root passwd 忽略大小写匹配以root开头的行
-
grep bash$ passwd 匹配以bash结尾的行
-
grep -n ^$ passwd 匹配空行并打印行号
-
grep ^# /etc/vsftpd/vsftpd.conf 匹配以#号开头的行
-
grep -v ^# /etc/vsftpd/vsftpd.conf 匹配不以#号开头的行
-
grep -A 5 mail passwd 匹配包含mail关键字及其后5行
-
grep -B 5 mail passwd 匹配包含mail关键字及其前5行
-
grep -C 5 mail passwd 匹配包含mail关键字及其前后5行
cut 切割字符串,按照顺序获取某一段内容;
-
-d :指定分隔符
-
-f :显示的列 -f1代表第一列
-
-c :截取每行的某几个字符 -c1-5代表每行的1-5个字符
tr 字符转换:替换字符、删除字符
-
语法:commands|tr 'string1' 'string2'
tr 'string1' 'string2' < filename
tr options 'string1' < filename
-
-d 删除字符串1中所有输入字符。
-
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
-
sort 排序显示,默认排序规则是字符编码排序
-
语法:sort [options] [filename]
-
-u :去重
-
-r :降序,默认是升序
-
-o : 将排序结果输出到文件中 类似 重定向符号 >
-
-n :按照数字的排序规则排序
-
-k :指定列来排序
-
uniq 去除连续的重复行,去重前先使用sort排序
-
语法:uniq [options] [filename]
-
-i:忽略大小写
-
-c: 统计重复行次数
-
-d:只显示重复行
-
tee 双向输出,在屏幕输出内容的同时,还可以保存到文件里
-
-a:双向追加重定向
-
语法:somecommand |tee filename
paste 将多个文件中的内容按列合并输出到屏幕,不会改变源文件
-
-d:指定分隔符,默认是
tab,只接受一个字符,要用单引号引起来 -
-s:行列转换后显示
xargs 将前一个命令的执行结果作为后一个命令的参数
-
管道(|):上一个命令的输出作为下一个命令的输入,做的是数据源。
-
命令格式: ''[somecommand]|[filename]'' |xargs -item command
vim download.txt
https://127.0.0.1/1.txt
https://127.0.0.1/2.txt
......
# 通过xargs+wget实现批量下载
cat download.txt |xargs wget
# 等价于wget一个个下载
wget https://127.0.0.1/1.txt
wget https://127.0.0.1/2.txt
......
特殊符号
| 符号 | 功能 |
|---|---|
| !! | 自动执行上一次执行的命令 |
| $ | 获取变量的值 |
| $(命令) | 获取命令的执行结果`` |
| &写在命令执行的结尾 | 让前台程序在后台执行 |
| && | 与运算 |
| &> | 将标准输出和标准错误输出都重定向到一个文件 |
| ; | 在命令行中,一行执行多条命令 |
| > | 输出重定向,将命令执行结果保存到文件中,不存在时会创建文件,存在时会覆盖原文件内容 |
| >> | 追加重定向,将内容添加到文件的最后,不覆盖,只追加 |
| < | 输入重定向,读取文件中的内容,交给命令执行 |
| << | 追加输入重定向,将键盘输入的内容交给命令批量执行 |
| | | 将前一个命令的执行结果交给后一个命令执行 |
进程管理
-
jobs 查看进程后台号
-
bg 编号 放到后台继续运行
-
fg 编号 将进程放到前台运行
sed(行编辑器)
sed数据处理原理
文本中的一行→缓存→电脑屏幕
sed 命令语法:
sed [options] ‘{command}[flags]’ [filename]
1)sed常用内部命令
-a 文件内容增加操作,将数据追加到某个位置之后
-i 文件内容增加操作,将数据插入到某个位置之前
-d 文件内容删除,将文件中的指定数据删除
-s 文件内容修改操作–替换,将一行中匹配的内容替换为新的数据
-c 文件内容修改操作–更改,将一行中匹配的内容替换为新的数据
-y 文件内容修改操作–字符转换,将一行中匹配的内容替换为新的数据
-p 文件内容查看,将文件内容输出到屏幕
#command 对文件干什么
sed常用内部命令
a 在匹配后面添加
i 在匹配前面添加
d 删除
s 查找替换 字符串
c 更改
y 转换 N D P
p 打印
2)命令选项说明
sed语法在sed命令中,命令选项是对sed中的命令增强
-e 在命令行中使用多个命令,用分号“;”隔开
-f 从文件读取编辑器命令,比如把替换修改写入vim文件里,再用-f直接调用这个文件
-n 抑制内存输出
-r 使用正则表达式
#命令选项
-e script 将脚本中指定的命令添加到处理输入时执行的命令中 多条件,一行中要有多个操作
-f script 将文件中指定的命令添加到处理输入时执行的命令中
-n 抑制自动输出
-i 编辑文件内容
-i.bak 修改时同时创建.bak备份文件。
-r 使用扩展的正则表达式
! 取反 (跟在模式条件后与shell有所区别)
注意:!!!
数据处理只是在缓存中完成的,并没有实际修改文件内容,如果需要修改文件内容可以直接使用-i命令选项。
-i是一个不可逆的操作,所以在修改文件之前我们可以先备份。
sed -i.bak '命令' 原文件(这样就会发现有一个叫做原文件.bak的备份文件,而原文件已经被我们修改啦)
3)标志
在sed命令中,标志是对sed中的内部命令做补充说明,
数字标志:此标志是一个非零正数,默认情况下,执行替换的时候,如果一行中有多个符合的字符串,如果没有标志位定义,那么只会替换第一个字符串,其他的就被忽略掉了,为了能精确替换,可以使用数字位做定义。而如果想要全部替换就把这个数字位替换为g
g标志:将一行中的所有符合的字符串全部执行替换
p标志:打印文本内容,类似于-p命令选项
#flags
数字 表示新文本替换的模式
#替换一行中的第二处dog为cat
sed 's/dog/cat/2' data2
g: 表示用新文本替换现有文本的全部实例
#将data1文件中的所有dog替换为cat
sed 's/dog/cat/g' data2
p: 表示打印原始的内容
w filename: 将替换的结果写入文件
awk——对输出流的处理
awk [options] ‘[BEGIN]{program}[END]’ [FILENAME]
#常用命令选项
-F fs 指定描绘一行中数据字段的文件分隔符 默认为空格
-f file 指定读取程序的文件名
-v var=value 定义awk程序中使用的变量和默认值
#注意:awk 程序由左大括号和右大括号定义。 程序命令必须放置在两个大括号之间。由于awk命令行假定程序是单文本字符串,所以必须将程序包括在单引号内。
1)程序必须放在大括号内
2)程序必须要用单引号引起来
#awk程序运行优先级是:
1)BEGIN: 在开始处理数据流之前执行,可选项
2)program: 如何处理数据流,必选项
3)END: 处理完数据流后执行,可选项
1)awk对字段(列)的提取
字段提取:提取一个文本中的一列数据并打印输出
字段相关内置变量
$0 表示整行文本
$1 表示文本行中的第一个数据字段
$2 表示文本行中的第二个数据字段
$N 表示文本行中的第N个数据字段
$NF 表示文本行中的最后一个数据字段
例如:打印test第六个字段 awk '{print $NF}' test
2)命令选项详解
-F 指定字段与字段的分隔符 awk -F ':' '{print $1,$3}' /etc/passwd
-f file 如果awk命令是日常重复工作,而又没有太多变化,可以将程序写入文件,每次使用-f调用程序文件就好,方便,高效。
# cat abc
{print $1,$3,$NF}
# awk -f abc test
1 quick dog
2 quick dog
3 quick dog
4 quick dog
5 quick dog
-v 定义变量
# 定义了一个变量 name=baism,然后调用变量读出数据
awk -v name='baism' 'BEGIN{print name}'
3)对记录(行)的提取
记录提取:提取一个文本中的一行并打印输出
记录的提取方法有两种:a、通过行号 b、通过正则匹配
记录相关内置变量
NR: 指定行号 number row
#举个例子,提取test第三行数据
#指定行号为3
awk 'NR==3{print $0}' test
#指定行的第一个字段精确匹配字符串为3
awk '$1=="3"{print $0}' test
都会显示第三行:3 the quick brown fox jumps over the lazy cat . dog
| 命令 | 筛选条件 | 核心逻辑 | 适用场景 |
|---|---|---|---|
NR==3 | 行号等于 3 | 按 “位置” 筛选 | 明确需要处理文件中特定行号的内容 |
$1=="3" | 第一个字段等于 3 | 按 “内容” 筛选 | 需要根据行中第一个字段的具体值来筛选行 |
4)awk对字符串的提起
#打印test第三行的第6个字段,也就是第6列
awk 'NR==3{print $6}' test
2555

被折叠的 条评论
为什么被折叠?



