我在创建单行内容或使用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。
提前致谢。
答案 0 :(得分:4)
你快到了。您只需指定B.R
之前存在的字符。如果B
位于第10位,则B
sed -i '/^.\{9\}B.R/s/$/NOT/' file.name
示例:强>
$ sed '/^.\{9\}B.R/s/$/NOT/' file
IPITTYTHEFOOBUTIDONOTPITTYTHEBAR
IPITTYTH BARBUTIDONOTPITTYTHEFOONOT