zoukankan      html  css  js  c++  java
  • 字符串替换/awk/sed

    1.字符串替换
    sed -i 's/aaa/bbb/g'
    +g :匹配每一行有行首到行尾的所有字符
    不加g:匹配每一行的行首开始匹配,匹配到第一个符合的字段,就会结束,跳到下一行

    2.sed与awk
    sed(关键字: 编辑):以行为单位的文本编辑工具,可以分析 standard input
    awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条件类型2{动作2}' filename, awk 也可以读取来自前一个指令的 standard input
    相对于sed常常用于一整行处理, awk则比较倾向于一行当中分成数个"字段"(区域)来处理, 默认的分隔符是空格键或tab键

    如果是按行操作,就统统都用 sed
    如果是不仅按行,还要按列操作,就统统都用 awk

    比如文件
    ab334cd-ccffafsdfbb006
    bb00dg-xxxxxx80790
    变成
    cdab334-ccffafsdfb006b
    dgbb00-xxxxx80790x 这里用sed比awk简单?

    1). awk中的for循环
    awk -F '' '{for(i=2;i<NF;i++) print $i}'

    2). 删除以某个符号开头的行
    sed -i '/^#/d' filename #删除空行
    sed 's/[[:space:]]//g' #删除所有空格
    sed 's/^[ ]//g' #删除行首所有空格和tab

    3). vim
    非编辑状态下输入:g/^$/d #删除空格行:
    非编辑状态下输入:%s/^s*//g #删除行首空格:
    非编辑状态下输入:%s/s*$//g #删除行尾空格:
    s 是元字符,匹配空白字符,等同于[ ]
    参考:https://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html

    习题:
    sla-list中有如下内容
    jdjdjj iien ['aaa','bbb','ccc']
    34dgfd4jj idfaien ['aaaa','bbbb','cccc','dddd']
    将[]中的aaa、bbb...提取出来
    awk -F [ '{print $2}' sla-list |awk -F , '{for(i=1;i<=NF;i++) print $i}'|sed "s#'##g"|sed 's/]//g'|sed 's/^ //g'

    几个注意点:
    1)
    NF:Number of Field
    NR:Number of Row

    2)awk中for循环的使用

    3)sed中#的使用

    使用#来代替/当分隔符,因此/不再具有转义功能,无需再加反斜杠来辨识。分隔符对单引号和双引号作用一样。

    尤其在替换单引号时推荐使用# sed 's#'#hello#g'
    sed 's#]#hello#g'
    sed 's/]/hello/g'

    3.
    将oldboy目录下的文件更名(oldboy替换成oldgirl)
    sed:
    for i in `ls oldboy`;do newname=`echo $i|sed 's/boy/girl/g'`;mv oldboy/$i oldboy/$newname;done;

    awk:
    for i in `ls`;do newfile=`echo $i|awk '{gsub(/oldboy/,"oldgirl");print}'`;mv $i $newfile;done
    小技巧:文件名通过echo来显示并修改

    rename:
    rename oldgirl oldboy *

    4.rename命令
    用字符串替换的方式批量改变文件名。
    rename main1.c main.c main1.c #rename 原字符串 目标字符串 文件列表
    支持通配符
    ? 可替代单个字符
    * 可替代多个字符
    [charset] 可替代charset集中的任意单个字符

    来自: http://man.linuxde.net/rename

    5.
    awk '{pattern + action}' {filenames}
    awk '/^[ns]/{print $1}' test -----如果记录以n或s开头,就打印这个记录

    6.转换大小写
    typeset -u name='hello';echo $name #变成大写
    typeset -l name='HELLO';echo $name #变成小写

    echo $name|tr '[a-z]' '[A-Z]'

    7.切换用户时出现“su: Authentication failure”
    sudo -i
    chmod +s /bin/su

    sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。
    提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。
    想退回普通账户时可以执行“exit”或“logout” 。

    s 在文件执行时把进程的属主或组ID置为该文件的文件属主。

  • 相关阅读:
    图的深度遍历
    判断森林中有多少棵树
    基于邻接矩阵的广度优先搜索
    第三届程序设计知识竞赛网络赛
    大数相乘
    a+b=x,ab=y
    poj3278
    不敢死队
    单链表中重复元素删除
    poj2506
  • 原文地址:https://www.cnblogs.com/stellar/p/7767465.html
Copyright © 2011-2022 走看看