1、awk
含义:
awk [options] 'commands' filenames-F :定义输入字段分隔符,默认的分隔符是空格或者制表符(tab)FS:输入字段分隔符OFS:输出字符分隔符RS:输入行记录分割符,默认换行符为一条记录ORS:输出行记录分割符,默认输出一条记录后换行BEGIN{} :行处理前{} :行处理END{}:行处理后$0:表示一行$1:表示第一列NF:表示列数$NF:表示最后一列NR:行号
分割处理
awk -F":" '{print $0}' /etc/passwdawk -F":" '{print $NF}' /etc/passwdawk 'NR==1{print $0}' /etc/passwd 打印第一行awk -F'[ :\t]' '{print $1,$2,$3}' /etc/passwd 按照空格,tab,:分隔awk 'BEGIN{FS=":"} {print $1,$2}' /etc/passwd 以:分割,输出列以空格分割awk 'BEGIN{FS=":";OFS="----"} {print $1,$2}' /etc/passwd 以:分割,输出列以----分割awk 'BEGIN{FS=":"} {print $1,$2} END{print "ok"}' /etc/passwd 每行记录以{print $1,$2}处理,所有行处理后以END{print "ok"}处理awk -F: '{print "username is:" $1 "\t uid is:" $3}' /etc/passwd 格式化输出awk -F":" '{printf "%-15s %-10s %-15s\n", $1,$2,$3}' /etc/passwd 格式化输出,%s字符类型 %d数值类型 %f浮点类型 - 表示左对齐。默认死右对齐 printf默认不会在行尾自动换行,加\n
结合正则处理
awk '/root/' /etc/passwd 过滤带有root单词的行awk -F":" '/^root/{print $1}' /etc/passwd 过滤带有root单词的行,以:分割,取第一列awk -F: '$1 ~ /root/' /etc/passwd 第一列带有单词root的行awk -F: '$1 ~ /root/ {print $NF}' /etc/passwd 第一列带有单词root的行,打印每行的最后一列awk -F: '$1 !~ /root/ {print $NF}' /etc/passwd 第一列不带单词root的行,打印每行的最后一列
表达式
awk -F":" '$4==0 {print $4,$0}' /etc/passwd 过滤第四列值为0的行,打印第四列和行记录awk -F: '$3 == 0' /etc/passwd 第三列为0的行awk -F: '$NF == "/bin/bash"' /etc/passwd 字符串匹配,要完全一样awk -F: '{if($4==0){print $0}}' /etc/passwd 打印第四列为0的行awk -F: '{if($4==0){print $1} else{print $4}}' /etc/passwd 第四列如果为0打印第一列,否则打印第四列awk -F: '{if($3>300){print $0}}' /etc/passwd 大于300的打印整行awk -F: '$1!~/root/ && $3<=15' /etc/passwd 第一列不含root,且第三列小于等于15awk -F: '$1~/root/ || $3<=15' /etc/passwd 第一列含root,或者第三列小于等于15# 打印对齐 #%-30s表示输出字符串,宽度30位,左对齐.%-15s用来指定第二列的,左对齐,宽度15.两个百分号之间可以没有空格.使用\n对每一行的输出加上换行符cat abc.txt | awk '{printf "%-30s%-15s\n",$1,$2}'
[root@node-1 ~]# printf "%-34s%s/%-12s%-18s%-10s\n" "文件系统" "已用" "总共" "使用率" "挂载点" && df -h | awk '/^\/dev/{printf "%-30s%s/%-10s%-15s%-10s\n",$1,$3,$2,$5,$6}'文件系统 已用/总共 使用率 挂载点/dev/mapper/centos-root 4.7G/17G 28% //dev/sda1 151M/1014M 15% /boot[root@node-1 ~]#
脚本编程
awk -F: '{if($3>0 && $3<1000){i++}} END{print i} ' /etc/passwd 第三列大于0小于1000时 i加1,最后大于iawk -F: '{if($3==0){i++} else if($3>999){k++} else{j++}} END{print i;pri nt k;print j}' /etc/passwdawk 'BEGIN{i=1;while(i<=10){print i;i++}}'awk -F: '/^root/{i=1;while(i<=7){print $i;i++}}' testawk -F: '/^root/{for(i=1;i<=NF;i++){print $i}}' test
2、cat
#查看文件cat wodeqingshu.txt
3、cmp
比较两个文件是否相同cmp -s $FILE.bak /etc/$FILE
4、cp
# 复制文件或目录cp srcFile destFile#交互,如果目的文件存在,询问是否覆盖cp -i src dest
5、echo
#把左边的输出放到右边的文件里去echo "angela" > qingshu.txt#按原格式输出 `ifconfig` 等价于 $(ifconfig)echo "`ifconfig`"-n:不换行输出。-e:输出转义字符。echo -e "abc\n123";可以输出彩色字符:echo -e "\033[31mtest\033[0m" ,\033[31m表示开始输出红色字符,\033[0m表示结束输出红色字符,32m:出绿色,30m:黑色。这些代码都属于ansi控制码echo -e "\e[1;31m this is a red txt \e[1;0m"echo -e "\e[31m this is a red txt \e[0m"echo -e "\e[42m this is a red txt \e[0m" 41m 4开头的时背景色。echo -e "\033[1;31m abc \033[0m" #高亮echo -e "\033[4;31m abc \033[0m" #下划线echo -e "\033[7;31m abc \033[0m" #反显
6、egrep
#查看/proc/cpuinfo中vmx或svm的个数egrep -c "(vmx|svm)" /proc/cpuinfoegrep支持正则表达式,grep不支持-c 统计个数
7、find
-name 按名字-type 按文件类型 d /f/l/ s-size 按文件大小 -10M /+10M-atime 按最后访问时间-mtime 按最后修改时间 find . -mtime 0 # 0(24小时)天之内修改的文件-ctime 按创建时间
find test.c #在当前目录下查找test.c文件find test.* #在当前目录下查找以test.开头的所有文件find -name "test.*" #在当前目录及子目录下查找以test.开头的所有文件-iname : 忽略大小写-name: 子目录下也查找find /home -type d -name "redis" #在home目录下及子目录下查找redis目录find /home -type f -name "redis" #在home目录下及子目录下查找redis文件#在文件系统中查找指定的文件find /etc/ -name "aaa"#将目前目录及其子目录下所有延伸档名是 c 的文件列出来。find . -name "*.c"#将目前目录及其子目录下所有最近 20 天内更新过的文件列出find . -ctime -20#为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:#find / -type f -size 0 -exec ls -l {} \;详细命令:https://www.cnblogs.com/Ido-911/p/9638612.html
8、grep
#在指定的文本文件中查找指定的字符串grep "xxx"#查询/root目录下带有alias的所有文件grep -Irl alias /root-I:不匹配二进制-r: 递归,可以是目录-l:不显示匹配的内容#在当前目录下查询内容包含3306的文件$grep -Ilr 3306 ./-I:列出文件内容符合指定的样式的文件名称。-l:不显示匹配的文件内容-r:递归操作-i:忽略大小写grep -v grep-v:不显示grep有,显示排除grep关键字的所有信息grep -Eoe "[0-5]"-E:扩展正则表达式-o:仅显示匹配的内容-e:后接正则表达式
9、head
#查看文件的头部20行 ,程序打出的日志在生产实践中具有非凡的debug的意义head -20 wodeqingshu.txt
10、less
#不仅可以分页,还可以方便地搜索,回翻等操作less wodeqingshu.txt
11、ls
#查看目录信息 #ls -l 等价于 lllsll -i 查看inode
12、mkdir
# 创建文件夹 , -p:如果要创建的文件夹的父目录不存在,则自动创建mkdir -p a/b/c
13、more
#可以分页看more wodeqingshu.txt
14、mv
# 移动文件的同时还修改了文件名mv a/wenjian1.txt b/file1.txt
15、printf
#printf 命令模仿 C 程序库(library)里的 printf() 程序。 格式化输出printf "%-10s %-8s %-4s\n" 姓名 性别 体重kgprintf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234姓名 性别 体重kg郭靖 男 66.12%s %c %d %f都是格式替代符%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。%-4.2f 指格式化为小数,其中.2指保留2位小数。printf "%d %s\n" 1 "abc"# 1 abc如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替printf "%s and %d \n" # and 0更多查看:https://www.runoob.com/linux/linux-shell-printf.html
16、pwd
#查看当前所处的路径pwd
17、rename
#将当前目录所有文件中的repo改成repo.bakrename repo repo.bak *
18、rmdir
#删除空文件夹 (只能删除空文件夹),-r:删除非空文件夹rmdir -r /a/b
rm
#删除文件, -r: 删除文件夹 ,-f:强制删除文件或文件夹rm filename
rsync
https://blog.csdn.net/weixin_46669463/article/details/105195798推送:rsync 可选项 src源文件 user@host::dest目标文件rsync 可选项 src源文件 rsync://user@host:port/dest目标文件拉取:rsync 可选项 user@host:src源文件 dest目标文件rsync 可选项 rsync://user@host:port/src源文件 dest目标文件--------------a 递归传输,并保持所有文件的属性-v 详细模式输出,传输过程中显示进度等详细的信息-z 传输的时候启动压缩的方式传输,提升效率-P 大写,显示进度-p 小写,保持文件的属性不变-t 保持文件的时间信息不变--exclude=PATH 排除文件
sftp
sftp root@192.100.3.100sftp>pwdsftp>help注意:命令前面加一个l表示对本地文件的操作pwd 查看远程目录lpwd 查看本地目录get /root/sf.txt 下载文件put -r /home # -r 表示上传目录cd
sed
-r:支持扩展正则, -i:修改文件 ,{}:支持多个命令
示例:
# 匹配以server开头的行,然后将其注释掉sed -ri 's/(^server.*)/#\1/' /etc/chrony.conf# 匹配以dataDir=开头的行,然后将其替换成 dataDir=/data# 在某一行后面添加内容sed -ri "/^set compatible$/a""set backspace=2" /etc/vim/vimrc.tiny# 匹配某一行的行号sed -rn "/^set compatible$/=" vimrc.tiny# 获取最后一行的内容sed -n "$"p vimrc.tiny# 获取最后一行的行号sed -n "$"= vimrc.tiny# 替换sed -ri "s/^set compatible$/set nocompatible/g" vimrc.tiny# 分组替换,去掉行首的#号sed -ri "s/^# (alias ls=*)/\1/g" bashrc
参数说明:-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。-h或--help 显示帮助。-n或--quiet或--silent 仅显示script处理后的结果。-V或--version 显示版本信息。动作说明:a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行d 删除行h 把模式空间里的内容复制到暂存缓冲区H 把模式空间里的内容追加到暂存缓冲区g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面l 列出非打印字符p 打印行n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理q 结束或退出sedr 从文件中读取输入行! 对所选行以外的所有行应用命令s 用一个字符串替换另一个g 在行内进行全局替换w 将所选的行写入文件x 交换暂存缓冲区与模式空间的内容y 将字符替换为另一字符(不能对正则表达式使用y命令)p==printd:delete= 打印匹配行的行号-n 取消默认的完整输出,只要需要的-e 允许多项编辑-i 修改文件内容-r 不需要转义指定行数:ps -aux | grep watchdog | sed -n 2p #1. 指定第一行(sed -n 指定行数)ps -aux | grep watchdog | sed -n 1,10p #2. 第一至十行ps -aux | grep watchdog | sed -n 1,100p #3. 超出范围不报错,第一行是1不能是0,否则报错添加删除:-e可以不需要sed -e 4a\newLine testfile #在testfile文件的第四行后添加一行,并将结果输出到标准输出nl /etc/passwd | sed '2,5d' #将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除!nl /etc/passwd | sed '3,$d' #要删除第 3 到最后一行nl /etc/passwd | sed '2d' #删除第二行nl /etc/passwd | sed '2a drink tea' #在第二行后(亦即是加在第三行)加上『drink tea』字样nl /etc/passwd | sed '2i drink tea' #那如果是要在第二行前nl /etc/passwd | sed '2a Drink tea or ......\> drink beer ?' #在第二行后面加入两行字Drink tea or ......和drink beer ? 每一行之间都必须要以反斜杠『 \ 』sed '/^$/d' filename #删除空行 除了换行符再没有其它字符的才算空行sed '/^[[:space:]]*$/d' filename #删除空行 只含有空格、tab 字符的行也算空行搜索显示:cat testfile|sed '/linux/p' -n #查找包含linux的行,显示出来,没有-n 还会显示所有的行cat testfile|sed '/linux/=' -n #查找包含linux的行,仅显示行号nl /etc/passwd | sed '/root/d' #删除/etc/passwd所有包含root的行,其他行输出nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}' #找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔。这里把bash替换为blueshell替换:sed '2,5c No 2-5 number' testfile #将第2-5行的内容取代成为『No 2-5 number』nl /etc/passwd | sed -n '5,7p'#仅列出 /etc/passwd 文件内的第 5-7 行取代:sed 's/要被取代的字串/新的字串/g'#/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' #将 IP 前面的部分予以删除/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g' #在将 IP 后面的部分予以删除多点编辑:nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/' #一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell#-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。直接修改文件内容(危险动作):sed 的 -i 选项可以直接修改文件内容sed -i 's/\.$/\!/g' testfile #将每一行的结尾是.的换为!#利用 sed 直接在 regular_express.txt 最后一行加入 This is a test:sed -i '$a This is a test' regular_express.txt #於 $ 代表的是最后一行,而 a 的动作是新增
删除
sed -r 'd' test 删除所有行sed -r '1d' test 删除第一行sed -r '1,3d' test 删除1到3行sed -r '/root/d' test 删除匹配root单词的行sed -r '/root/,4d' test 删除带有root行,一直到第4行sed -r '/root/,+4d' test 删除带有root行,在删除4行sed -r '1~2d' test 从第一行开始,每间隔2行删除,即:删除所有奇数行sed -r '8{h;d}' test {}表示有多个命令,对于每行,先暂存,再删除,该命令表示第8行先暂存,再删除sed -r '$d' test 删除最后一行sed -r '/^[ \t]*#/d' test 删除以#开头的行sed -r '/^[ \t]*$/d' test 删除空行sed -r '/^[[:space:]]*$/d' test 删除空行sed -r '/^[ \t]*$|^[ \t]*#/d' test 删除空行或以#开头的行sed -r '/^[ \t]*($|#)/d' test 删除空行或以#开头的行
查找和替换
sed -r 's/root/bin/' test 查找root单词的行,替换每行的第一个root单词为binsed -r 's/root/bin/g' test 查找root单词的行,替换每行的所有root单词为binsed -r 's/^root/bin/g' test 每行以root单词开头的行,替换为bin开头sed -r 's/root/bin/gi' test 查找root单词的行,替换每行的所有root单词为bin,忽略大小写sed -r 's/\/usr\/local/\/var\/lib/g' test 将/usr/local 替换为/var/lib 需要转义sed -r 's#/usr/local#/var/lib#g' test 将/usr/local 替换为/var/lib 可将/换成其他非字母字符,不需要转义sed -r '1,5s/(.*)/#\1/' test ()不需要加\,因为有-r。将1-5行最前面加上#sed -r '1,5s/(.*)/#&/' test 将1-5行最前面加上#,&代表前面表达式匹配的内容sed -r '1,5s/^/#/' test 将1-5行最前面加上#,&代表前面表达式匹配的内容
暂存空间
默认情况下,暂存空间里面是个换行符(空行)sed -r 'g' file 处理第一行时,从暂存空间拿过来一个换行符,拿来覆盖,第二行类推sed -r 'G' file 处理第一行时,从暂存空间拿过来一个换行符,拿来追加,这行下面会增加一个空行,第二行以此类推暂存和取用命令:h,H,g,Gsed -r '1h;$G' /etc/hosts 把/etc/hosts的第1行覆盖写到暂存空间(模式空间只有1行,暂存空间只有1行),然后把暂存空间的内容追加到/etc/hosts的最后1行(相当于把/etc/hosts的第1行复制到最后一行)sed -r '1{h;d};$G' /etc/hosts 把第1行覆盖写到暂存空间,并删除/etc/hosts的第1行,然后把暂存空间的内容追加到最后一行(相当于把/etc/hosts的第1行复制到最后一行,并删除第1行)sed -r '1h;2,$g' /etc/hosts 把第1行放到暂存空间,然后将暂存空间的内容放到第2行至最后一行sed -r '1h;2,3H;$G' /etc/hosts 把第1,2,3行放到模式空间,然后追加到 /etc/hosts文件的最后一行反向选择:!sed -r '3!d' /etc/hosts 除了第3行外都删除
22、seq
seq 10 #1 2 3 4 5 6 7 8 9 10 1到10序列 默认1开始seq 1 10 #1 2 3 4 5 6 7 8 9 10 1到10序列seq 1 2 10 #1 3 5 7 9 1到10序列 ,步长为2
23、scp
#1、上传目录:scp [-r] ./util root@192.168.1.65:/home/wwwroot/limesurvey_back/scp#2、上传文件,-P:指定端口 默认端口22scp -P 2200 ./util root@192.168.1.65:/home/wwwroot/limesurvey_back/scp#下载文件:从192.100.3.30拉取文件scp root@192.100.3.30:/home/app/util.txt /home
24、tail
#实时刷新显示文件的尾部tail -f user.log# 查看文件的尾部的10行tail -10 wodeqingshu.txt
25、tar
tar -cvf testdir.tar testdir/ 归档gzip testdir.tar 压缩gzip filebzip filetar -czvf testdir.tar.gz testdir/tar -xzvf testdir.tar.gz 解压到当前目录下tar -zxvf testdir.tar.gz -C Downloads/ 解压到指定的Downloads目录下这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件可选的参数-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出-num :用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6下面的参数-f是必须的-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
26、tee
将标准输入复制到每个指定文件,并显示到标准输出。tee [选项]... [文件]...-a, --append 内容追加到给定的文件而非覆盖-i, --ignore-interrupts 忽略中断信号--help 显示此帮助信息并退出--version 显示版本信息并退出如果文件指定为"-",则将输入内容复制到标准输出。tee -a demo.txt 追加内容
27、touch
#创建一个空文件touch a.avi
28、vi/vim
29、wc
wc -l 统计文本信息(-l行数,-w词数,-m字符数)
30、xargs
#将grep输出的内容一次发一个给xargs处理,xargs将内容交给cat作为参数grep -Ilr 3306 ./ | xargs -n1 catecho "1 2 3 4" |xargs -n1 echo #相当于echo 1 ,echo 2 ,echo 3, echo 4 ,xargs默认使用echo作为命令echo "1 2 3 4" |xargs -n2 echo #echo 1 2 ,echo 3 4ls ./ | xargs -n1 ls #ls xx ,ls xxx ,ls xxxecho "aXbXcXd" |xargs -n1 -dX -I {} echo {}.bak-d :以X分割,默认回车-I :将值赋值给变量,以便后面使用 ,可以使用{}接受,也可使用其他的变量,如var
