sed中正则表达式的使用

sed是linux下文本处理的一个非常重要的工具,可用于批量文本的查找和替换,也可以采用正则表达式格式。

  1. 正常用法

    sed ‘s/pattern/replace_string/’ file

    这个命令并不会直接替换file文件中的内容,只是会输出替换后的内容。如果要实时替换生效,需要加上 -i 选项(in place的意思),即:
    sed -i ‘s/pattern/replace_string/’ file

  2. 高级用法
    采用正则表达式
    比如有一个文本init.xml中相关的配置选项:

    <root>
    <process>
    <!--
        进程信息:
            nickname:每个进程唯一对应的别名,用于区分各个进程;
    -->
        <!--1110 从编号0开始, [2-5]4个cpu --> 
        <!--1110 从编号0开始的[2,15] 14个cpu  24G--> 
        <item daemon="true"  nickname="p1" cpumask="E" TimeLimit="0" MemLimit="1048576">
            <ProName>program.exe</ProName>
            <Parameter></Parameter>
            <ProPath>/mnt/hgfs/version_1/bin/linux64/program.exe</ProPath>
            <szRunCmd><![CDATA[cd /mnt/hgfs/version_1/bin/linux64/&&./program.exe>/dev/null&]]></szRunCmd>
        </item> 
    </process> 
    <rule>
        <item relation="p1" restart="p1"></item>
    </rule>
    </root>

    需要把其中的的值替换为新的路径path,把的值替换为相应的路径值。

    sed -i “s?.+? progpath p r o g p a t h prog_exe?” config/Daemon.xml
    其中:
    .+ 表示任意字符
    类似的还有:\w+ 匹配包括下划线的任何单词字符
    ? 是分隔符,一般用/, 但如果正则中包含/, 则再用/作为分隔符,就需要转义,而且阅读不太直观;

    sed中用()括号括起来的正则匹配的子内容,可以用到替换字符串中,用\1,\2…来表示,
    还可以用$来表示整个匹配的内容。

  3. 骨灰用法

如果要替换的内容,用共同的地方,则可以一次性替换所有的文件,避免逐个文件处理。
例如:

sed -i "s?$original_file_path?$file_path?" `grep $original_file_path -rl config/`

config 目录下查找所有 originalfilepath o r i g i n a l f i l e p a t h 字 符 , 然 后 都 替 换 为 file_path。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux正则表达式是一种用于匹配文本模式的语法。它可以用于各种文本处理任务,如搜索、替换、过滤等。Linux常用的正则表达式语法包括元字符、字符类、量词、分组、反向引用等。在Linux正则表达式可以通过命令行工具(如grep、sed、awk等)或编程语言(如Perl、Python等)来使用。 ### 回答2: Linux正则表达式(Regular Expression)是一种文本模式匹配的工具,可以用来搜索、替换和提取文本数据。 在Linux正则表达式的语法符合POSIX标准,常用的元字符包括: 1. 字符匹配: - . (点号):表示匹配除换行符以外的任意一个字符。 - [ ](方括号):匹配方括号的任意一个字符,如[abc]表示匹配a、b或c。 - [^ ](脱字符):匹配除了方括号指定的字符以外的任意一个字符。 - \ (反斜杠):用来转义特殊字符,如\.表示匹配点号本身。 2. 重复匹配: - *(星号):表示匹配前面的元素零次或多次。 - +(加号):表示匹配前面的元素一次或多次。 - ?(问号):表示匹配前面的元素零次或一次。 - {m,n}(花括号):表示匹配前面的元素至少m次,最多n次。 3. 边界匹配: - ^ (插入符):匹配行的开头位置。 - $ (美元符):匹配行的结尾位置。 - \b (单词边界):匹配单词的边界,包括字母、数字和下划线。 4. 分组匹配: - ( )(圆括号):将多个元素组合成一个单元,可以进行分组匹配和捕获。 Linux常用的命令行工具如grep、sed和awk都支持正则表达式。通过正则表达式,可以灵活地搜索、匹配和修改文本内容,提高工作效率和准确性。 需要注意的是,正则表达式可以灵活强大,但在复杂的情况下,可能会导致性能较慢。因此,在使用正则表达式时,应根据实际需要选择合适的模式并进行性能测试。 ### 回答3: Linux正则表达式指的是在Unix/Linux系统使用的一种文本模式匹配工具,它可以用来搜索、替换、匹配和验证文本。正则表达式是一种强大的字符匹配工具,它能够在文本进行复杂的模式匹配,并提供了多种符号和操作用于构建匹配模式。 在Linux,我们可以使用一些命令行工具来使用正则表达式,比如grep、sed、awk等。grep是一个常用的工具,用于在文本搜索匹配某个模式的行,它可以通过使用正则表达式来指定模式。通过使用不同的元字符、字符类和操作符,我们能够构建不同的匹配模式。 正则表达式的元字符包括:. * ? [] () {} ^ $ | \,它们分别代表不同的特殊含义。比如,"."匹配任意单个字符,"*"匹配前面的字符任意次数(包括0次),"?"匹配前面的字符0次或1次,"[]"定义一个字符类,匹配其的任意字符,"()"用于分组,"{}"用于指定重复次数,"^"匹配行的开头,"$"匹配行的结尾,"|"代表逻辑或运算,"\“用于转义字符,等等。 正则表达式还提供了一些预定义的字符类,比如\d匹配任意一个数字字符,\w匹配任意一个数字、字母、下划线字符,\s匹配任意一个空白字符,等等。我们还可以使用“-”来定义字符范围。 通过使用这些元字符、字符类和操作符,我们可以构建不同的正则表达式,用于匹配我们需要的文本模式。在Linux正则表达式广泛应用于各种任务,比如文件搜索、日志分析、文本处理等。熟练掌握正则表达式将有助于我们更高效地完成这些任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值