zoukankan      html  css  js  c++  java
  • Linux三剑客grep、awk、sed

    何为Linux三剑客?

    1. 第一个剑客是 grep,grep 会根据正则表达式查找相关内容并打印对应的数据。
    2. 第二个剑客是 awk,awk 的名字来源于三个作者的名字简称,它可以根据定位到的数据行处理其中的分段。
    3. 第三个剑客是 sed,它是 stream editor 流式编辑器的简称,可以定位到数据行并对数据进行增删改查操作。
    4. 提到三剑客首先不得不提和三剑客组合的正则表达式了。

    正则表达式

    通配符 功能
    c* 将匹配 0 个(即空白)或多个字符 c(c 为任一字符)。
    . 将匹配任何一个字符,且只能是一个字符。
    [xyz] 匹配方括号中的任意一个字符。
    [^xyz] 匹配除方括号中字符外的所有字符。
    ^ 锁定行的开头。
    $ 锁定行的结尾。

    需要注意的是,在基本正则表达式中,如通配符 *、+、{、|、( 和 )等,已经失去了它们原本的含义,而若要恢复它们原本的含义,则要在之前添加反斜杠 ,如 *、+、{、|、( 和 )。

    Linux三剑客之Grep

    grep是Linux下通用的文本内容查找命令
    grep [选项] [匹配名] [路径]
    选项与参数:

    • -c :计算找到 '搜寻字符串' 的次数
    • -i :忽略大小写
    • -n :输出行号
    • -v :反向选择,亦即显示出没有'搜寻字符串' 内容的那一行。
    • --color=auto :可以将找到的关键词部分加上颜色显示。

    示例:

    grep root /etc/passwd # 将/etc/passwd,有出现root的行取出来 等同于cat /etc/passwd | grep root


    grep test aa bb cc #显示在aa,bb,cc文件中匹配test的行


    grep -v 'xxx' a.txt #指显示不包含xxx的行或文件


    grep -r print test/ #递归搜索test目录下包括print字符串的行


    grep -n '[set]' 1.sh #匹配[]内任意一个或多个字符串的行


    grep -n '[0-9]' 1.sh # 匹配有数字的行


    grep -n '^d' 1.sh #匹配d开头的行


    grep -n 'x$' 1.sh #匹配x结尾的行

    Linux三剑客之Awk

    AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
    之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
    语法:
    awk [options] 'script' var=value file(s)
    awk [options] -f scriptfile var=value file(s)
    常用参数:

    • -F,用于指定输入分隔符
    • -v,用于设置变量的值

    常用内置变量:

    • $0 : 表示整个输入记录,当前整行字符串.
    • $n : 表示当前输入记录的第 n 个域,这些域之间由 FS 分割,当前行的第n段。
    • NF: number of Field,当前行的字段的个数(即当前行被分割成了几列),字段数量。
    • NR: 行号,当前处理的文本行的行号。
    • FNR: 各文件分别计数的行号。
    • FS: 输入字段分隔符, 默认为空白字符。
    • OFS: 输出字段分隔符, 默认为空白字符。
    • FILENAME: 当前文件名。
    • RS: 输入记录分隔符(输入换行符), 指定输入时的换行符
    • ORS: 输出记录分隔符(输出换行符),输出时用指定符号代替换行符

    示例:

    awk -F: '{print $1}' /etc/passwd #通过:分割查看第一列数据

    awk -F: '{print$1,$3,$6}' /etc/passwd #输出字段1,3,6, 以制表符作为分隔符

    awk -F: '{print NF}' /etc/passwd # 显示每行有多少字段

    awk -F: 'NR==5{print}' /etc/passwd # 打印出/etc/passwd文件中的第5行

    awk -F: 'NR>2 && NR<6{print}' /etc/passwd #打印/etc/passwd文件中的3至5行

    awk -F: '/root/{print}' /etc/passwd # 打印出文件中含有root的行

    awk -F: '!/root/{print}' /etc/passwd #打印出文件中不含root的行

    awk -F: '/root|bash/{print}' /etc/passwd #打印文件含有root或者bash的行

    awk -F: '$1~/root/{print}' /etc/passwd #打印第一个字段是root的行

    cat /etc/passwd | awk 'NR>2 && NR>10' #查看test.txt文件内第2到第10行的内容

    ifconfig eth0 | grep inet | awk '{print$2}' | awk 'NR==1{print}' #查看linux eth0的ip地址

    Linux三剑客之sed

    sed的命令格式:sed [options] 'command' file(s)
    选项:
    ✓ -e :直接在命令行模式上进行sed动作编辑,此为默认选项;
    ✓ -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
    ✓ -i :直接修改文件内容;
    ✓ -n :只打印模式匹配的行

    动作说明:
    ✓ a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    ✓ c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    ✓ d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    ✓ i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    ✓ p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    ✓ s :取代,可以直接进行取代!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦

    1、替换操作:s命令 ◆ sed 's/book/books/' file # 替换文本中的字符串
    ◆ sed -n 's/test/TEST/p' file #-n选项和p命令一起使用表示只打印那些发生替换的行

    ◆ sed -i 's/book/books/g' file # 直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books

    ◆ sed 's/book/books/g' file # 使用后缀 /g 标记会替换每一行中的所有匹

    2、删除操作:d命令
    ◆ sed '/^$/d' file #删除空白行

    ◆ sed '2d' file # 删除文件的第2行

    ◆ sed '2,$d' file # 删除文件的第2行到末尾所有行

    ◆ sed '$d' file # 删除文件最后一行

    ◆ sed '/^test/'d file # 删除文件中所有开头是test的

    3、其它
    ◆ sed -e '1,5d' -e 's/test/check/' file # 多点编辑,上面sed表达式的第一条命令删除1至5行,第二条命令用check替换test
    ◆ sed -n '5,/^test/p' file #打印从第5行开始到第一个包含以test开始的行之间的所有行
    ◆ sed '/test/r file' filename # file里的内容被读进来,显示在与test匹配的行后面
    ◆ sed -n '/test/w file' example # 在example中所有包含test的行都被写入file里
    ◆ sed '/^test/a his is a test line' file # 将 this is a test line 追加到 以test 开头的行后面
    ◆ sed -i '2a his is a test line' test.conf # 在 test.conf 文件第2行之后插入 this is a test line
    ◆ sed '1,10y/abcde/ABCDE/' file # 把1~10行内所有abcde转变为大写

  • 相关阅读:
    图2(矩环问题)
    图1(八连块)
    恶补一下DP+背包专题(刷刷水题)L2
    food(洛谷P4040 [AHOI2014/JSOI2014]宅男计划)
    滑动窗口
    Lawnmower(洛谷 CF115B)
    Price(洛谷P4109 [HEOI2015]定价)
    逆序对
    矩阵
    1.25日考试
  • 原文地址:https://www.cnblogs.com/huny/p/13664843.html
Copyright © 2011-2022 走看看