【问题标题】:Replace specific character/string in specific scope with regexp [duplicate]用正则表达式替换特定范围内的特定字符/字符串[重复]
【发布时间】:2020-07-20 09:41:46
【问题描述】:

例如

~cat ./temp
1,2,"3,1,2",4,5,"A,2,Csd",xx,a,"s,s,,",,,

shell 解析后我想要这个输出:

~parse.sh ./temp
1,2,"3_1_2",4,5,"A_2_Csd",xx,a,"s_s__",,,

即 将"..." 范围内的所有, 替换为_

欢迎任何 shell 解决方案,awk/sed/perl/其他你能想到的聪明的东西。

sn-p代码越短越好

【问题讨论】:

    标签: regex perl awk replace


    【解决方案1】:

    您可以使用这个 perl 命令行将每个匹配项的逗号音译为下划线:

    perl -pe's#"[^"]*"#$&=~y/,/_/r#ge' ./temp
    

    $& 是整场比赛

    y///是音译运算符(也可以写成tr///

    r 修饰符返回一个结果字符串(而不是替换字符的数量)。

    e 修饰符允许以替换模式执行代码。

    【讨论】:

    • 太棒了!谢谢!您能否详细解释$&=~y/,/_/r 这部分或获取有关此语法含义的链接?第三季~
    • @hedleyyan:请注意,如果您必须处理更复杂的情况(带有换行符、转义引号的字段),请使用模块 Text::CSV 构建一个简单的脚本。
    猜你喜欢
    • 2019-08-23
    • 2021-12-19
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多