zoukankan      html  css  js  c++  java
  • awk-sed

    sed

    # 先读取资料、存入模式空间、对其进行编辑、再输出、再用下一行替换模式空间内容

    -n  #不再显示模式空间中的内容(默认显示)

    -i  #直接对文本编辑

    -r  #正则可不转换特殊字符

    --follow-symlinks  #修改软链接文件时 

    匹配字符出现的次数

    *  #任意多个字符

    ?  #0或者1个 最小匹配,没有加-r参数需要转义 ?

    $  #最后一行

    ^  #开头行

    .*  #匹配任意多个字符

    .  #任意单个字符

    ^$  #空行

    ?  #0或者1次

    +  #至少出现1次

    {3}  #精确出现3次

    {2,5}  #出现2-5次

      #转义符号

    command

    d

    删除符合条件的行
    #sed '1,2d' a.txt
    删除文件中包含oot的行
    #sed '/oot/d' a.txt
    删除第一行及其后两行
    #sed '1,+2d' a.txt
    删除第一行
    #sed '1d' a.txt
    

     p

    显示符合条件的行
    显示以/开头的行
    #sed -n '/^//p' a.txt
    

     a string

    在符合条件的行后面追加新行。string为追加的内容
    在以/开头的行后面追加新行,#hello world
    sed '/^//a #hello world' a.txt
    在以/开头的行后面追加两行内容,分别为# hello worl  # hello linux 
    # sed '/^//a # hello world
    # hello linux' a.txt 
    

    i string

    在符合条件的行前添加新行,string为追加的内容
    在文件第1行添加# hello world 
    # sed '1i # hello world' a.txt

    c string 

    替换指定行的内容
    将文件中最后一行内容替换为End Of File
    # sed '$c End Of File' /1.txt 
       
    # sed '7c SELINUX=disabled' /etc/sysconfig/selinux

    =

    用于显示每一行的行号
    显示/etc/passwd文件最后一行的行号
    # sed -n '$=' /etc/passwd
    49

    s/regex/string/[修饰符] 查找并替换 默认情况下,只替换每一行第1次出现的字符
    修饰符:
    g:替换每一行所

    i:忽略大小写

    [root@localhost ~]# sed 's/^#/?/' /etc/fstab 
    查找文件中的UUID,并替换为uuid
    # sed 's/UUID/uuid/' /etc/fstab    
    将行首的/替换成#
    # sed 's/^//#/' /etc/fstab    
    [root@localhost ~]# sed 's|/|#|g' /etc/fstab 
    将每一行出现的所有/替换为@
    # sed 's///@/g' /etc/fstab 
    
    删除行首的空格
    [root@shellscript ~]# sed 's|^#||' /etc/fstab 
    
    [root@shellscript ~]# history | sed 's|^[[:space:]]+||'
    
    page2image40381408

    awk

    1、awk内置变量之记录变量

    FS:  指定读取文件时的分隔符,默认空白字符,相当于-F

    OFS:  指定输出的分隔符,默认空白字符

    [root@localhost ~]# head -n 1 /etc/passwd | awk -F: '{print $1,$7}'
    root /bin/bash
    [root@localhost ~]#
    [root@localhost ~]# head -n 1 /etc/passwd | awk 'BEGIN{FS=":"}{print $1,$7}'
    root /bin/bash

    [root@localhost ~]# head -n 1 /etc/passwd | awk -F: '{print $1,$7}'
    root /bin/bash
    [root@localhost ~]# head -n 1 /etc/passwd | awk -F: 'BEGIN{OFS="---"}{print $1,$7}'
    root---/bin/bash

    2、awk内置变量之数据变量

    NR:记录awk所处理的文本的行数,如果有多个文件,所有文件统一进行计数

    [root@localhost ~]# awk '{print "第",NR,"行内容:",$0}' /etc/hosts /etc/issue
    第 1 行内容: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    第 2 行内容: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    第 3 行内容: CentOS release 6.6 (Final)
    第 4 行内容: Kernel on an m
    第 5 行内容:

    注意:

    print在显示变量值时,不需要使用$

    FNR:记录awk正在处理的文件的行数,如果有多个文件,每个文件分别进行计数

    [root@localhost ~]# awk '{print "第",FNR,"行内容:",$0}' /etc/hosts /etc/issue
    第 1 行内容: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    第 2 行内容: ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    第 1 行内容: CentOS release 6.6 (Final)
    第 2 行内容: Kernel on an m
    第 3 行内容:

    NF:记录awk正在处理的当前行被分隔成了几个字段
    # cat test.txt
    this is a test.
    # awk '{print NF}' test.txt
    4
    # awk '{print $NF}' test.txt
    test.

    [root@localhost ~]# awk -F: '{print "Number of line: ", NF}' /etc/passwd

    [root@shell ~]# awk -F. '{print "Number of Line: ", NF}' /etc/hosts
    [root@shell ~]# awk 'BEGIN{FS="."}{print "Number of Line: ", NF}' /etc/hosts
    Number of Line: 6
    Number of Line: 3
    Number of Line: 6

  • 相关阅读:
    [LeetCode]130 Surrounded Regions(DFS)
    [LeetCode]233 Number of Digit One(数位DP)
    POJ 3225.Help with Intervals-线段树(成段替换、区间异或、简单hash)
    POJ 2528.Mayor's posters-线段树(成段替换、离散数据、简单hash)
    POJ 3468.A Simple Problem with Integers-线段树(成段增减、区间查询求和)
    HDU 1698.Just a Hook-线段树(成段替换、输出总和tree[1])
    POJ 2886.Who Gets the Most Candies? -线段树(单点更新、类约瑟夫问题)
    计蒜客 28437.Big brother said the calculation-线段树+二分-当前第k个位置的数 ( ACM训练联盟周赛 M)
    HDU 5649.DZY Loves Sorting-线段树+二分-当前第k个位置的数
    计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)
  • 原文地址:https://www.cnblogs.com/charon2/p/10367005.html
Copyright © 2011-2022 走看看