【问题标题】:sed - match regex in specific positionsed - 在特定位置匹配正则表达式
【发布时间】:2015-04-01 16:17:36
【问题描述】:

我在创建单行或简单脚本以使用 sed 编辑一些固定长度文件时遇到了一些麻烦。

假设我的文件有这种格式的行:

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTH3FOO

如果整行都被视为一个字符串,我可以说我想用正则表达式匹配从位置 10 开始且长度为 3 的子字符串。如果它与正则表达式匹配,我想在该行末尾添加一些其他字符串。

假设匹配的正则表达式是B.R,并且要附加在行尾的字符串是NOT,我希望我的文件变成:

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTHEFOONOT

文件中的行比本示例中的要大。

到目前为止,我有这个:

sed -i '/B.R/ s/$/NOT/' file.name

问题在于这忽略了正则表达式匹配的位置,使得示例的第一行也匹配:

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTH3FOO

我也愿意使用 awk。

提前致谢。

【问题讨论】:

    标签: regex sed substring


    【解决方案1】:

    你快到了。您只需要指定 B.R 之前存在的字符。如果B在第10位,那么B之前必须有9个字符

    sed -i '/^.\{9\}B.R/s/$/NOT/' file.name
    

    示例:

    $ sed  '/^.\{9\}B.R/s/$/NOT/' file
    IPITTYTHEFOOBUTIDONOTPITTYTHEBAR
    IPITTYTH BARBUTIDONOTPITTYTHEFOONOT
    

    【讨论】:

    • 谢谢。 :) 这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多