linux shell 脚本攻略 下

江枫思渺然 提交于 2019-11-28 21:22:02

sed 入门

sed可以替换给定文本中的字符串,当然也可以用正则表试试匹配

sed 's/pattern/replace_string/' file

或者

cat file | sed 's/pattern/replace_string'

使用-i选项,可以讲替换结果应用于原文件

sed -i 's/text/replace/' file

如果要替换所有的的内容,需要在末尾增加g

sed -i 's/pattern/replace/g' file

也可以使用1g 2g 来从第n+1处开始替换

移除空白行

sed '/^$/d' file

其中 ^$ 为行首和行尾 空白行中 行首和行尾是一起的

双引号用来匹配变量

sed "s/$text/Hello"

如果有特殊字符可以使用

sed -i "s#$test#hello#g"

awk


通用语法

awk ' BEGIN { print "start" } pattern { commands } END { print "end" }

file

awk脚本通常由3个部分组成,BENGIN语句块,END语句块,和能够使用模式匹配的通用语句块

awk " BEGIN { statements } {statements} END {end statements }"

例如

awk " BEGIN { i=0 }  { i++ } END { print i } " filename

awk " BEGIN { i=0 } { i++ } end { print i } " filename

如何工作

1.执行 BEGIN { commands } 语句块中的语句

2.从文件或者输入流中读取一行 然后执行 pattern { commands } 重复这个过程

3.到末尾时候,结束 并执行 END 语句


BEGIN 语句 可以 做些 如  变量初始化,打印输出表格的表头等

pattern 语句是主体的命令,如果不不指定,就打印每一个读到的行


简单说就是 while do


比如

echo -e "line1\nline2" | awk ' BEGIN { print "start" } { print } END { print "end" }'


当print参数是以逗号进行分割时,参数打印时则以空格作为定界符,在awk的print中,双引号是被当做拼接操作符使用

echo | awk ' { var1="v1" ;var2="v2" ; print var1,var2;print var1"-"var2;} '

输出

v1 v2

v1-v2


awk的特殊变量

NR :表示记录数量 ,在执行过程中对应于当前的行号

NF : 表示字段数量,在执行过程中对应于当前行的字段数

$0 :包含执行过程中当前行的文本

$1 :包含第一个字段的文本内容

$2:包含第2个字段的文本内容

$n: 包含第n个字段的文本内容


echo -e "line f2 f3 \nline2 f4 f5\nline3 f6 f7"|\
awk ' { print "LINE no:"NR",NO OF FIELDS:"NF,"$0="$0,"$1="$1,"$2="$2,"$3="$3 }'

利用-V选项将外部值传递给awk

var1="var1";var2="var2"
echo | awk ' { print v1,v2 } ' v1=$var1 v2=$var

使用getline读取行

过滤

awk ' NR<5 ' 行号小于5

awk ' NR==1,NR==4 '

awk ' /linux'

awk ' !/linux'

设置字段定界符

awk -F: ' print $NF ' /etc/passwd

或者

awk ' BEGIN { FS=":" } { print $NF } ' /etc/passwd

awk 内置函数

length(String)

index(String,search_string) 返回search_sring在字符串中出现的位置

split(String,array,delimiter) 用定界符生成一个字符串列表并将该列表存入数组

substr(String,start,end) 生成子串

sub(regex,replacement,stirng)

match(regex,string) 检查正则表达式是否能够匹配

打印从M行到N行

awk ' NR==M,NR==N' filename

打印正则表达式直接的

awk ' /start_parttern/./end_parttern/' filename

wget

wget url1 url2

可以使用选项 -O 指定输出的文件名

可以使用-o 指定日志文件

可以使用 -t 指定重试次数

if [ $# = 3 ] 参数为3个

lynx -traversal url 会生成一个reject.dat文件 包含此url的所有链接

tar

归档

tar -cf output.tar [SOURCE]

向归档中添加文件

tar -rvf test.tar new_file

列出归档内容

tar -tf archive.tar

压缩的时候排除文件

tar --exclude-vcs -czvvf source_code.tar.gz eye_of_gnone_svn

gzip -l test.tar.gz  列出属性信息

netstat -tnp 列出开放的端口

列出占用cpu最高的10个进程

ps -eo comm,pcpu --sort -pcpu | head

ps -eLf  --sort -nlwp | head

列出线程数最多的10个进程

操作mysql 可以需要安装 mysql-server 和mysql-client

可以安装ImageMagick 用来缩放图片 转换格式等

这两天吸收了很多,调整了很多思路,很多可以再以前和以后的代码中用到,基本系统的学习了shell,提供了很多思路

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!