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   #    .*表示任意字符

  • 相关阅读:
    C# 时间+三位随机数
    dataGridView加行标识方法与制作
    MySql多列查询
    php 去掉字符串的最后一个字符
    DataTable 排序
    汇编第一个程序 Hello World (初学者与入门)
    C# 获取前一天,明天,本周,上周,本季度等!
    php 字符串中任意添加
    天涯论坛的经典回帖!!!
    系统时间同步
  • 原文地址:https://www.cnblogs.com/zndxall/p/8032818.html
Copyright © 2011-2022 走看看