【问题标题】:Replace file content starts with number) and preserving rest of line content替换文件内容以数字开头)并保留其余的行内容
【发布时间】:2019-08-24 12:43:47
【问题描述】:

我想用 sed 或类似的解决方案替换包含特殊模式的文件。我可以用单独的 sed 替换文件,但数字可以是任何东西,并且需要按原样保留前缀。

实际文件:

1) L0 | Delete multiple contacts | C543072
2) L1 | Move Multiple Messages via Header toolbar Move button | C1832588
3) L1 | Move Multiple Messages contains file attachment | C2058412
- L1 | Forward message containing attachment | C1976614
- L0 | Normal message contains file attachment | PREAPPS-1488
- L3 | Forward as signed in message view | C1990347

预期文件:

FAILED - L0 | Delete multiple contacts | C543072
FAILED - L1 | Move Multiple Messages via Header toolbar Move button | C1832588
FAILED - L1 | Move Multiple Messages contains file attachment | C2058412
SKIPPED - L1 | Forward message containing attachment | C1976614
SKIPPED - L0 | Normal message contains file attachment | PREAPPS-1488
SKIPPED - L3 | Forward as signed in message view | C1990347

尝试过的代码:

sed -i 's/- L/SKIPPED - L/' /report.txt
sed -i 's/1) L0/FAILED - L0/' /report.txt
sed -i 's/[0-9]) L/FAILED - L[0-9]/' /report.txt (doesn't preserve LX)

是否有任何单个命令使用正则表达式替换内容以及保留字符串以数字开头的LX)L[数字]?

【问题讨论】:

    标签: sed


    【解决方案1】:

    sed 脚本中的多个命令可以用分号分隔 (;)。

    $ sed 's/^[0-9]\+)/FAILED -/; s/^-/SKIPPED -/' file
    FAILED - L0 | Delete multiple contacts | C543072
    FAILED - L1 | Move Multiple Messages via Header toolbar Move button | C1832588
    FAILED - L1 | Move Multiple Messages contains file attachment | C2058412
    SKIPPED - L1 | Forward message containing attachment | C1976614
    SKIPPED - L0 | Normal message contains file attachment | PREAPPS-1488
    SKIPPED - L3 | Forward as signed in message view | C1990347
    
    • ^ 匹配输入行的开头,
    • [0-9]\+ 匹配一位或多位数字。

    【讨论】:

    • 是的,感谢您接受这个问题,您的解决方案非常好!我已包含前缀空格,您的代码运行良好。
    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2018-08-05
    • 2015-07-25
    相关资源
    最近更新 更多