zoukankan      html  css  js  c++  java
  • Linux Shell Scripting Cookbook 读书笔记 5

    sed,awk

    1. sed (string editor)

    使用-i可以将结果运用于原文件

    sed 's/text1/text2/' file > newfile

    mv newfile file

    其实可以使用 sed -i 's/text1/text2/' file 搞定

    如果加后缀g表示全部替换,不加只会替换每行的第一处匹配

    使用Ng选择从第几处开始匹配,第二个例子是为了说明无论使用/或者|或者其他什么字符,都是可以用作定界符的

    移除空白行

    sed '/^$/d'  # /pattern/d或移除匹配到的行,注意没有s了

    用&表示匹配到的内容,并且d在sed命令中不支持。。

    第二个例子,用1 2分别标记之前括号里pettern匹配到的内容

    如果需要对sed中的内容求值,可以使用双引号

    2. awk

    awk通常由BEGIN,END和能够使用模式匹配的通用语句块三个部分组成,这三个部分都是可选的,脚本通常包含在双引号或者单引号中

    1)执行BEGIN

    2)读取stdin中的一行,然后执行pattern中的语句块,重复这个过程,直到文件读完;

        这个例子中没有提供pattern,则认为每一行都是匹配的

    3) 执行END

    awk中的print使用

    1. print的参数以逗号分隔时,打印出来的参数以空格作为定界符

    2. 双引号当做拼接操作符

    echo在这里的作用是输入一行,使得awk只执行一次

    特殊变量

    NR: 表示记录数量(number of rows),在执行中对应于当前行号

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

    $0: 表示执行过程中,当前行的内容

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

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

    -v选项将外部变量(非来自stdin)传递给awk

    从文件传输变量

    getline读取某一行

    例如跳过第一行

    指定样式

    设置定界符

    或者awk -F: '{print $NF}' /etc/passwd

    通过getline读取外部命令输出到变量output

    "command" | getline output

  • 相关阅读:
    angular 实现全选、反选、个别选择的实现
    idea下git版本回退
    统一设置滚动条样式
    vue小知识点
    Java面试题之Oracle 支持哪三种事务隔离级别
    Java面试题之hashmap中用什么hash算法解决碰撞的?
    Java面试题之Integer.valueOf(String s);采用了什么设计模式
    TCP面试题之为什么会有TIME_WAIT状态
    Java面试题之如何防止重复下单问题?
    Java面试题之在多线程情况下,单例模式中懒汉和饿汉会有什么问题呢?
  • 原文地址:https://www.cnblogs.com/ryansunyu/p/9240760.html
Copyright © 2011-2022 走看看