zoukankan      html  css  js  c++  java
  • linux sed 常见字符串处理

    参考:sed命令 匹配符 详解 | 未来往事 (360doc.com)

    1.删除特殊字符

    将 1.1.0_boke_1.0.1 转换为110_boke_101

    command: new_var=`echo 1.1.0_boke_1.0.1 |sed  s/\.//g` (说明:.是特殊字符,需要专一,输出new_var即110_boke_101)

    2.将字符串首字母转换成大写

    command: new_string=`echo abcd |sed  's/^../\u&/' ` 

    3.将字符串中的第一个字母替换成预期值

    比如将abcd变成wbcd

    command:new_string=`echo abcd |sed s/^./w/g `      #其中的.表示单个字符,^.表示首个字符

    同样删除首字母:比如将abcd变成bcd

    command:new_string=`echo abcd |sed s/^.//g `

    4.修改替换某一行的某些字符

    比如,修改第六行的develop为master

    sed -i 6s/develop/master/  .repo/manifest.xml

    或者:下面是将85行的127.0.0.1替换为192.168.10.108

    sed -'85{s/127.0.0.1/192.168.10.108/}' test.txt 

    5.正则匹配处理取某几段字符

    将var1=“build_option:OPTION_1=0x60001,OPTION_2=0x60002,OPTION_5=0x60005,OPTION_6=0x60006”只显示0x60001,0x60002,0x60005,0x60006

    命令:

    echo $var1 |awk -F ":" '{print $2}' |sed s/OPTION_[0-9]=//g  使用[0-9]正则匹配数字

    6.替换某行内容

    命令格式1:sed '行号c 新字符串' 文件,比如:sed -i "42c versionCode: $vcode_new\," test.txt

    命令格式2:sed '起始行号,终止行号c 新字符串' 文件

    或者:

      有时候我们发现,替换某个字符比较难,比如将a=" "换成a="123",整行替换反而更简单,但是要首先获取这一行的行号,比如行号是3,那么命令则是:

    tmp_num=3;new_conf=" a="\"123\" "; sed  -i  "$tmp_num"s/^.*$/$new_conf/  filese   #   .*表示任意字符

    整行替换某一行并在行头添加空格:【替换第10行,为了对齐,添加空格】

    sed  -i  10s/^.*$/"            targetSdkVersion : 29,"/ test.gradle

    7.将文件中的特殊符号变成换行符

    command:

    (1)逗号变成换行符:sed -i 's/,/\\n/g' user_config.txt

    (2)“\”变成“/” :sed -i 's/\\/\//g' test.txt

     (3)删除“.” :  echo $var1 | sed 's/\.//g'

    8.显示某一行或者某几行

    sed -n 2p test.txt

    sed -n  '10,20p' test1

    9.删除文件中的空行

    command: sed -i '/^\s*$/d' test.txt

    10.sed在指定行的上下行插入内容

    a\ 在指定的行后面追加一行 
    b\ 在指定的行前面追加一行

    (1)在test.txt第3行后插入一行,内容为"test sed": 

    modify_num=3; new_string="test sed";sed -i "$modify_num"'a\'"$new_string" test.txt 

    (2)在test.txt第3行前插入一行,内容为"test sed": 

    modify_num=3; new_string="test sed";sed -i "$modify_num"'b\'"$new_string" test.txt    

    11.删除行头的匹配行以及行头空格已经包含/的字符串

    sed /'tag:'/d test1 |sed 's/ //g' |sed 's/origin\///g' > test2

    12.在指定位置加入空行

    在行头加入空格

    sed -i '40s/^/         /' test.txt

    (2)在第三行到最后行的行头加入空格

    sed -i '3,$/^/     /' test.txt

    13.删除匹配行到结尾的内容

    sed -i '/002 test/,$d' test_file # "002 test"就是匹配行,$代表的最后行

    14.删除首行到匹配行的内容

    sed -i '1,/003 test/d'  test_file # "003 test"就是匹配行,1代表的是首行

    16.删掉每一行的行首的字符:几个点表示几个字符

    (1)删掉每一行的第一个字符:sed -i 's/.//' test_file  #一个点一个字符

    (2)删掉每一行的前两个字符:sed -i 's/..//' test_file  #两个点 两个字符

    三个点表示前三个字符,四个点表示前四个字符,其它类推。。。。

    参考:https://www.cnblogs.com/bymo/p/8085821.html

    17.sed 删掉文件中每行行尾的空格

    sed -i 's/ *$//g' test.txt    #使用$通配符表示行尾

    18.显示匹配行到匹配行或者显示匹配行到指定行的内容(省去了获取匹配行的行号的麻烦)

    send_parm文件内容如下:

    very_old
    # $1: test1
    # $2: test2
    # $3: test3
    # $4: test4
    
    4.0_before
    # $1: test3
    # $2: test4
    # $3: test5
    # $4: test6
    
    4.0_after
    #channel: test2
    #install:test3
    #demoName: test1

    (1)显示very_old到4.0_before的内容【第二行到匹配行“4.0_before”】: sed -n '2,/4.0_before/'p send_parm 

    (2)显示4.0_before到4.0_after的内容【匹配行"4.0_before"到匹配行“4.0_after”】: sed -n '/4.0_before/,/4.0_after/'p send_parm  

    (3)显示4.0_after之后的内容【匹配行到末尾行】:sed -n '/4.0_after/,$'p send_parm

     如果只想显示匹配行之间的内容,不想要带匹配行,可以使用d删除,比如:

    (1)显示very_old到4.0_before之间的内容,不包含“4.0_before”: sed -n '2,/4.0_before/'p send_parm  |sed '/4.0_before/'d

    (2)显示4.0_before到4.0_afte之间的内容,不包含"4.0_before"和“4.0_after”】: sed -n '/4.0_before/,/4.0_after/'p send_parm  |sed '/4.0_before/'d |sed '/4.0_after/'d

    (3)显示4.0_after之后的内容,不包含“4.0_after”:sed -n '/4.0_after/,$'p send_parm |sed '/4.0_after/'d

    19.修改文件中多处相同字符串的不同值为给定值

    比如文件test.txt内容是:

                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 20116;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 2.5.8;
                    MARKET_VERSION = 2.5.8;
                    MARKET_VERSION = 2.5.8;
                    MARKET_VERSION = 2.5.8;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 31002;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;
                    MARKET_VERSION = 30801;

    文件中MARKET_VERSION有多个值,我们要把里面所有的MARKET_VERSION的值都换成202105

    命令:sed -i 's/MARKET_VERSION =.*;/MARKET_VERSION = 202105;/g'   test.txt   #    .*表示任意字符

  • 相关阅读:
    WCF 第十三章 可编程站点 为站点创建操作
    WCF 第十三章 可编程站点 所有都与URI相关
    WCF 第十二章 对等网 使用自定义绑定实现消息定向
    WCF 第十三章 可编程站点 使用WebOperationContext
    Using App.Config for user defined runtime parameters
    WCF 第十三章 可编程站点
    WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
    WCF 第十二章 总结
    WCF 第十三章 可编程站点 使用WebGet和WebInvoke
    WCF 第十三章 可编程站点 URI和UriTemplates
  • 原文地址:https://www.cnblogs.com/zndxall/p/8032818.html
Copyright © 2011-2022 走看看