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
我在创建单行文件或简单脚本以使用 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
sed -i '/^.\{9\}B.R/s/$/NOT/' file.name
示例:
$ sed '/^.\{9\}B.R/s/$/NOT/' file
IPITTYTHEFOOBUTIDONOTPITTYTHEBAR
IPITTYTH BARBUTIDONOTPITTYTHEFOONOT