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,提供了很多思路
来源:oschina
链接:https://my.oschina.net/u/931578/blog/137874