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

时间:2015-02-02 16:42:50

标签: regex sed substring

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

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

IPITTYTHEFOOBUTIDONOTPITTYTHEBAR

IPITTYTH BARBUTIDONOTPITTYTH3FOO

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

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

IPITTYTHE的 FOO BUTIDONOTPITTYTHEBAR

IPITTYTH BAR BUTIDONOTPITTYTHEFOONOT

文件中的行大于此示例中的行。

到目前为止,我有这个:

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

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

IPITTYTHEFOOBUTIDONOTPITTYTHE的 BAR

IPITTYTH BAR BUTIDONOTPITTYTH3FOO

我也可以使用awk。

提前致谢。

1 个答案:

答案 0 :(得分:4)

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