精华内容
下载资源
问答
  • /g'即可对输入字符串进行转义 场景 sed命令常常被用来对文本做处理,其中一个最经常用到的处理就是替换替换的语法如下: echo $STRING | sed -e 's/<match_pattern>/<replace_pattern>/g' 当然也...

    本文首发于我的Github博客
    本文记录了作者在使用sed命令进行文本替换时,对于使用到的替换模式进行转义处理使用到的sed命令,简单来说:

    • 使用sed -e 's/[]\/$*.^[]/\\&/g'即可对输入字符串进行转义

    场景

    sed命令常常被用来对文本做处理,其中一个最经常用到的处理就是替换,替换的语法如下:

    echo $STRING | sed -e 's/<match_pattern>/<replace_pattern>/g'
    

    当然也可以有其他的变化,不过这是作者使用的最多的方式。

    在使用这些的时候,我们可能会在match_patternreplace_pattern中引用变量,已达到分别管理和增强可读性的目的,比如

    # dummy text
    TEXT="affaflns,fakfnakn"
    REPLACE="ff"
    REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")
    

    但是,如果上面引用的REPLACE里面有特殊字符,我们就会遇到问题,比如

    # dummy text
    TEXT="affaflns,fakfnakn"
    REPLACE="/a"
    # 有问题
    REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")
    

    我们的本意是将a替换为/a,但是,使用这几条命令,会得到

    sed: 1: "s/a//a/g
    ": bad flag in substitute command: 'a'
    

    这里的原因就是/a中的/是一个特殊字符,如果希望得到我们上述的效果,应该这么操作

    # dummy text
    TEXT="affaflns,fakfnakn"
    REPLACE="\/a"
    # 成功
    REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")
    

    我们通过\/进行转义,取得了成功,但是这种方式使得我们编写replace_pattern变得麻烦,而且很不直观,我们希望有一个函数来达到如下效果

    # dummy text
    TEXT="affaflns,fakfnakn"
    REPLACE="/a"
    REPLACE=$(func $REPLACE)
    REPLACED_TEXT=$(echo $TEXT | sed -e "s/a/$REPLACE/g")
    

    也就是说,编写replace_pattern时,可以直接编写,而后使用一个函数或者命令自动转义再使用

    解决方案

    stackoverflow

    使用sed -e 's/[]\/$*.^[]/\\&/g'即可

    方案解析

    我们这次的方案就是对原生的replace_pattern做一次替换:

    • match_pattern[]\/$*.^[]
      • 这个正则表达式的结构很具有迷惑性,其实它是一个大的bracket group
      • 也就是说,实际上是[ ]\/$*.^[ ]的结构
      • 意味着匹配]\/$*.^[中的任一字符
    • replace_pattern\\&
      • 这个replace_pattern用到了一个转义字符和一个特殊字符
      • 转义字符\\表示的就是\
      • 特殊字符&表示的是match_pattern匹配到的内容

    综合起来,这个替换语句就是把]\/$*.^[前面全部加上一个斜杠,进行转义

    展开全文
  • sed替换的基本语法为:sed ‘s/原字符串/替换字符串/‘单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单...

    sed替换的基本语法为:

    sed ‘s/原字符串/替换字符串/‘

    单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如:

    sed "s/原字符串包含‘/替换字符串包含‘/" //要处理的字符包含单引号

    命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”:

    sed ‘s?原字符串?替换字符串?‘ //自定义分隔符为问号

    可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个,例如:

    sed ‘s/原字符串/替换字符串/‘ //替换所有匹配关键字

    上箭头”^”表示行首,美元”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行),这里犯二了,搜了半天哪个符号表示首行,半天才想起来,首行就是数字”1″啊.那么在行首和行尾添加字符串就是把行尾和行首替换,例如:

    sed ‘s/^/添加的头部&/g‘ //在所有行首添加

    sed ‘s/$/&添加的尾部/g‘ //在所有行末添加

    sed ‘2s/原字符串/替换字符串/g‘ //替换第2行

    sed ‘$s/原字符串/替换字符串/g‘ //替换最后一行

    sed ‘2,5s/原字符串/替换字符串/g‘ //替换2到5行

    sed ‘2,$s/原字符串/替换字符串/g‘ //替换2到最后一行

    替换样式可以多个在同一条命令中执行,用分号”;”分隔,例如:

    sed ‘s/^/添加的头部&/g;s/$/&添加的尾部/g‘ //同时执行两个替换规则

    sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使用参数”i”直接在文件中替换:

    sed -i ‘s/原字符串/替换字符串/g‘ filename //替换文件中的所有匹配项

    时间: 08-16

    展开全文
  • Shell 通过sed替换文件字符串

    千次阅读 2019-03-19 17:41:53
    sed's/原字符串/替换字符串/' 1.如果有单引号就把最外层的单引号变成双引号就可以了 sed"s/原字符串包含'/替换字符串包含'/" 2.如果字符串中有/ 就把分割符从/改成# sed -i "" "s#...

     

    sed 's/原字符串/替换字符串/'

    1.如果有单引号就把最外层的单引号变成双引号就可以了

    sed "s/原字符串包含'/替换字符串包含'/"
    

    2.如果字符串中有/  就把分割符从/改成#

    sed -i ""  "s#http:/ /www.baidu.com/scm#ssh://git@git.baidu.sh:7999#g" PodConfig.rb

    3.匹配关键字 g

    可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个
    

    ”^”表示行首

    ”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行)

    # 注意这里的 " & " 符号,如果没有 “&”,就会直接将匹配到的字符串替换掉
    sed 's/^/添加的头部&/g'      #在所有行首添加
    sed 's/$/&添加的尾部/g'      #在所有行末添加
    sed '2s/原字符串/替换字符串/g'  #替换第2行
    sed '$s/原字符串/替换字符串/g'   #替换最后一行
    sed '2,5s/原字符串/替换字符串/g' #替换2到5行
    sed '2,$s/原字符串/替换字符串/g' #替换2到最后一行
    sed 's/原字符串/替换字符串/2g'   #替换2到最后一行
    

    4.如果要批量替换 就加参数 i

      sed -i 

    5.如果有多条替换命令就可以用分号分割

    sed 's/^/添加字符串&/g;s/$/&添加的尾部/g'
     

     

    展开全文
  • 替换字符串,我们需要使用以下格式。 $ sed s/替换的目标字符串/替换后的字符串/ 文件名 ...注意,sed命令仅替换字符串并输出它,但不会重写实际文件的内容 如果要将替换的内容保存在文本中,请使用重定向“>”。 s
  • linux sed 批量替换字符串.pdf
  • sed命令替换字符串

    2020-01-07 14:29:07
    sed命令替换字符串 使用sed命令可以直接替换文件中的字符串,在应用中比较普遍 替换字符串的一般格式为: sed 's/aaa/bbb/g' 其中s表示替换filename文件中每行的第一个匹配到的字符串,如果要替换前三行匹配到的...

    sed命令替换字符串

    使用sed命令可以直接替换文件中的字符串,在应用中比较普遍

    替换字符串的一般格式为:

    sed 's/aaa/bbb/g'

    其中s表示替换filename文件中每行的第一个匹配到的字符串,如果要替换前三行匹配到的字符串,可以修改成sed '3s/aaa/bbb/g',以此类推;

    sed -i可以直接修改文件中的内容sed -i 's/aaa/bbb/g' filename

    aaa、bbb可以修改为变量,但需要用单引号扩起来sed -i 's/'$aaa'/'$bbb'/g' filename;

    同时执行两种替换规则sed -i 's/aaa/bbb/g;s/ccc/ddd/g' filename,中间用分号隔开;

    如果替换到的字符串中包含和sed中一样的分隔符,那么就必须修改当前的分隔符。例如替换字符串中如果包含斜杠/,那么命令要修改为sed -i 's#aaa#bbb#g' filename, #可以替换成其它的符号,以此类推,sed会把s后面的第一个字符作为分隔符;

    sed替换变量命令在网上搜罗一下大概有四种:

    1、eval sed 's/$a/$b/g' filename

    这个命令在实际运用中没有使用过

    2、sed "s/$a/$b/g" filename

    这种方式把sed里面的单引号改为双引号,从而可以直接使用变量,这种方式使用比较普遍

    3、sed 's/'$a'/'$b'/g' filename

    把变量名称用单引号包裹起来,这种方式使用也较多

    4、sed s/$a/$b/g filename

    这个命令在实际运用中没有使用过

    需要注意的是,双引号的拓展作用在使用变量时是无效的。例如在替换的字符串中如果包含斜杠"/",此时使用变量来替换就会出现问题,必须要修改sed的分隔符:

    字符串aa="123abc/qqq"

    sed -i "s/$aa/bb/g" filename

    此时直接使用这个命令sed是会报错的,即便给字符串aa加上转义:aa="123abc\/qqq",把变量作为整体也无效:

    sed -i "s/${aa}/bb/g" filename

    只能修改sed中的分隔符为其它字符:

    sed -i "s?$aa?bb?g" filename

    这个时候就不会报错了,sed的分隔符成了?,不会与字符串中的/冲突。

    展开全文
  • 在linux服务器中,单独文件或批量进行替换文件中某个字符串。 命令格式 sed -i "s/old/new/g" `grep old -rl path` old是待被替换字符串,new是待替换old的新字符串,grep操作主要是按照所给的路径查找old,...
  • shell脚本中使用sed替换路径字符串

    千次阅读 2019-08-28 10:39:57
    示例场景如下: shell中获取某一bin的路径(如ctags),并将其写入到某一配置文件(如.vimrc)中。...sed -i '' 's#let Tlist_Ctags_Cmd.*#let Tlist_Ctags_Cmd = '"\'${ctags_bin}\'"'#g' ~/.vimrc 这...
  • sed 批量替换字符串

    2019-12-03 10:56:53
    sed命令可以批量替换多个文件中的字符串。 命令如下: sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` 例如:我要把 charset=gb2312 替换为 charset=UTF-8,执行命令: sed -i "s/charset=gb...
  • linux sed 批量替换字符串

    千次阅读 2017-10-19 09:37:15
    linux sed 批量替换字符串 一月 21, 2014 ( NO COMMENTS ) Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。 命令如下: sed -i "s/原字符串/新字符串/g" `...
  • 三剑客之sed命令替换字符串

    千次阅读 2019-04-28 15:58:43
    文本替换: sed 's#原字符串#新字符串#g' file s 单独使用→将每一行中第一处...sed -i 's/原字符串/替换字符串/g' filename ####替换文件中的所有匹配项 sed 's/^/添加的头部&/g' ####在所有行首添加...
  • shell :linux sed 批量替换字符串

    万次阅读 2018-08-20 15:43:01
    linux sed 批量替换字符串 一月 21, 2014 ( No Comments ) Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。 命令如下: sed -i "s/原字符串/新字符串/g" `...
  • Linux中使用sed命令替换字符串

    万次阅读 2018-06-08 15:54:06
    文本替换:sed 's#原字符串#新字符串#g' file s 单独使用→将每一行中第一处匹配的字符串进行替换 g 每一行进行全部替换→sed指令s的替换...sed -i 's/原字符串/替换字符串/g' filename ####替换文件中的所有匹...
  • VIM和sed 替换字符串方法

    千次阅读 2019-12-22 23:25:22
    目录 VIM替换字符串方法 ...sed命令替换字符串 VIM替换字符串方法 1. 基本替换 :s/str1/str2/ 替换当前行第一个str1为str2 :s/str1/str2/g 替换当前行所有str1为str2 :n,$s/str1/st...
  • sed替换字符串

    千次阅读 2019-03-20 11:43:54
    sed(Stream EDitor)是一个强大而又简单的...在使用sed命令进行替换操作时用到s(字符串替换)、c(整行/整块替换)、y(字符转换)。 常见方法如下: ✹将每行中的第一个the替换为THE sed 's/the/THE/' test.txt ✹...
  • SED替换字符串用法

    千次阅读 2016-03-22 19:18:16
    sed -i 's/原字符串/要替换字符串/g' filename
  • 使用sed命令可以进行字符串的批量替换操作,以节省大量的时间及人力; 使用的格式如下: sed -i "s/oldstring/newstring/g" `grep oldstring -rl path` 其中,oldstring是待被替换字符串,newstring是待...
  • sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,552
精华内容 15,820
关键字:

sed替换空字符串