sed - 在特定位置匹配正则表达式

sed - match regex in specific position

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

假设我的文件包含以下格式的行:

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTH3FOO

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

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

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTHEFOONOT

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

到目前为止我有这个:

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

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

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTH3FOO

我也愿意使用 awk。

提前致谢。

你快到了。您只需要指定 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