目录
Linux三剑客:
grep(单纯的查找或匹配文本)
- grep命令详解 https://www.zsythink.net/archives/1733
-
–color=auto 或者 –color:表示对匹配到的文本着色显示
-i:在搜索的时候忽略大小写
-n:显示结果所在行号
-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数
-o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行
-v:输出不带关键字的行(反向查询,反向匹配)
-w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配
-Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
-Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
-Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context
-e:实现多个选项的匹配,逻辑or关系
-q:静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到。-P:表示使用兼容perl的正则引擎。
-E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep。
- grep -vwf a.txt b.txt > c 输出文件2中的内容,但是剔除包含在文件1中的内容
- awk -F'\t' 'NR==FNR{a[$1]=1} NR>FNR{if(a[$1]!=1){print $1}}' 5_spu.txt bk_spuId.txt > spuid
- grep -f 1.txt 2.txt > c 输出文件2中与文件1中的相同行。
sed (编辑匹配到的文本)
-
shell脚本–sed的用法 https://blog.csdn.net/wdz306ling/article/details/80087889
- sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。
- sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。
- 使用方法
- 在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’ 文件
- 先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件
- 常用选项
- -r:使用扩展正则表达式
- -e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
- -f:后跟保存了sed指令的文件
- -i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
- -n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
- sed中的编辑命令:
- a:追加 向匹配行后面插入内容
- c:更改 更改匹配行的内容
- i:插入 向匹配行前插入内容
- d:删除 删除匹配的内容
- s:替换 替换掉匹配的内容
- p:打印 打印出匹配的内容,通常与-n选项和用
- =:用来打印被匹配的行的行号
- n:读取下一行,遇到n时会自动跳入下一行
- r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
awk(格式化文本,对文本进行较复杂格式处理)
- awk系列:https://www.zsythink.net/archives/tag/awk
- awk是一个报告生成器,它拥有强大的文本格式化的能;awk是由Alfred Aho 、Peter Weinberger 和 Brian Kernighan这三个人创造的,awk由这个三个人的姓氏的首个字母组成。
- awk的基本语法 awk [options] ‘Pattern{Action}’ file
- awk是逐行处理的,逐行处理的意思就是说,当awk处理一个文本时,会一行一行进行处理,处理完当前行,再处理下一行,awk默认以”换行符”为标记,识别每一行
- awk常用的内置变量(-v)以及其作用如下: https://www.zsythink.net/archives/1374
- FS:输入字段分隔符, 默认为空白字符 -F'\t' 或 -v FS='\t'
-F
"[可以制定多个分隔符]"
-
OFS:输出字段分隔符, 默认为空白字符
RS:输入记录分隔符(输入换行符), 指定输入时的换行符
ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF:number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量
NR:行号,当前处理的文本行的行号。
FNR:各文件分别计数的行号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数
-
awk格式化 print和printf https://www.zsythink.net/archives/1421
-
awk的模式(Pattern),模式可以总结为如下5种 https://www.zsythink.net/archives/1426
1、空模式
2、关系运算模式
3、正则模式
4、行范围模式
5、BEGIN/END模式'
- awk动作 流程控制语句与循环语句 https://www.zsythink.net/archives/2046
- awk数组 https://www.zsythink.net/archives/2093
- 可以用于统计数据
- awk内置函数 https://www.zsythink.net/archives/2113
- srand、rand、int、gsub、sub、length、index、spilt、asort和asorti等
- awk结果保存新文件
- 例如:awk '{print $1,$2}' test > output
seq
- seq详解 https://www.zsythink.net/archives/128
- seq命令可以输出连续的数字,或者输出固定间隔的数字,或者输出指定格式的数字
-
-s 指定输出的分隔符,默认为\n,即默认为回车换行
-w 指定为定宽输出,不能和-f一起用
-f 按照指定的格式输出,不能和-w一起使用
- 一次性创建5个名为dir001 , dir002 .. dir005 的目录
- mkdir $(seq -f 'dir%03g' 1 5)
- seq -f 'dir%03g' 1 5 | xargs mkdir
scp
- linux命令scp(复制文件和目录)详解及cp和scp命令的使用方法
- 本地机器上传 scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/scptest
- iTerm2与远程服务器进行文件上传、下载
- 文件上传 #登陆远程服务器,输入rz,就会弹出一个窗口,选择文件,就可以上传了,默认会上传到当前目录
rz
- 文件下载 #登陆远程服务器,输入sz,选择需要下载的文件夹,回车,选择下载存放目录,等待下载完成
sz filename1 filename2 … filenameN
shell
- shell教程:http://c.biancheng.net/cpp/shell/
- Shell 除了能解释用户输入的命令,将它传递给内核,还可以:
- 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果;
- 在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入;
- Shell 本身也可以被其他程序调用。
-
cat /etc/shells 查看当前 Linux 系统的可用 Shell
-
echo $SHELL 当前 Linux 的默认 Shell
-
shell变量
-
定义变量
-
variable=value
-
variable='value'
-
单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
-
-
variable="value"
-
输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。
-
-
-
使用变量
-
echo $author 或 echo ${author}
-
-
命令结果赋值变量
-
variable=`command` 或 $(command)
-
-
只读变量
-
readonly myUrl
-
-
删除变量
- unset variable_name
- 特殊变量
-
变量
含义
$0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 $? 上个命令的退出状态,或函数的返回值。 $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
-
-
-
-
变量替换
-
形式
说明
${var} 变量本来的值 ${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。 ${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。 ${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。
若此替换出现在Shell脚本中,那么脚本将停止运行。${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。
-
-
- shell运算符
-
运算符
说明
举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。 -ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。 ! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。 -o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。 -a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。 -z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false -n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ]或[ $a ] 返回 true。 -e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名 如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符则为真 -d 文件名 如果文件存在且为目录则为真 -f 文件名 如果文件存在且为普通文件则为真 -c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真
-
-
shell输入输出重定向
- command > file 输出重定向(覆盖)
- $command > file 2>&1 stdout 和 stderr 合并后重定向到 file
- command >> file 输出重定向(追加)
- command < file 输入重定向
- command > /dev/null 只执行命令,屏幕不输出结果