• linux shell 脚本攻略 下


    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,提供了很多思路

  • 相关阅读:
    整数
    mysql-5.7.13-win32 安装
    Flex air修改外部xml文件 (转)
    JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
    C#中&和&&的区别
    百度UEditor1.4.3编辑器和asp.net MVC 5结合
    ASP.NET MVC ajax数组,模型绑定问题。
    MEF依赖注入无法在在构造函数中使用的解决办法
    AJaxFileUpload 文件上传<pre>,json字符串为空解决方法
    C#中字符串转换为IPAdress
  • 原文地址:https://www.cnblogs.com/duplicatedcode/p/3138205.html
Copyright © 2020-2023  润新知