Regex 删除匹配模式前的28个字符并替换为字母

Regex 删除匹配模式前的28个字符并替换为字母,regex,unix,sed,terminal,cut,Regex,Unix,Sed,Terminal,Cut,我有一个长文件,我想在匹配前删除27个字符,并在匹配前替换一个字母 example 123456789123456789123456789Replace 所以输出应该是 "aReplace" (删除“替换”之前的28个字母,并在“替换”之前添加字母“a”) 我没有使用实际的文件,它的模式太大了与sed: echo '123456789123456789123456789Replace' | sed -e 's/.\{27\}Replace/"aReplace"/g' 输出: "aRepla

我有一个长文件,我想在匹配前删除27个字符,并在匹配前替换一个字母

example 123456789123456789123456789Replace
所以输出应该是

"aReplace"
(删除“替换”之前的28个字母,并在“替换”之前添加字母“a”)

我没有使用实际的文件,它的模式太大了

与sed:

echo '123456789123456789123456789Replace' | sed -e 's/.\{27\}Replace/"aReplace"/g'
输出:

"aReplace"

如果您希望将
Replace
(根据问题标题)前面的28个字符替换为字母
a
,则可以使用

sed 's/.\{28\}Replace/aReplace/'
请注意,您给出的字符串只有27个字符…(这也反映在您的文本正文中)-因此您希望

sed 's/.\{27\}Replace/aReplace/'
要获得
aReplace
,请在具有
123456789123456789123456789Replace
的行中执行

假设您的文本文件是
myFile.txt
,则完整的命令是

cat myFile.txt | sed 's/.\{27\}Replace/aReplace/' > newFile.txt

这会将修改后的内容放入新文件
newFile.txt
-它允许您在覆盖输入文件之前确认它是否按计划工作…

Perl一行程序,这可能会有所帮助

perl -pe 's/.{27}(?=Replace)/a/g' file

这是一个长文件,我想在匹配模式之前删除27个字母,这里的模式是“替换”,删除后我想在“替换”前面放一个字符(在本例中是“a”),“a”,所以输出看起来像“aReplace”@aritrachtenbergs有时你说“delete 28”,有时你说“delete 27”。显示的测试字符串在
Replace
之前有27个字符。你能在问题上保持一致吗?@user3723229,当你问问题时,你真的需要更加精确和清晰。不仅与您提到的字符数不符,还以引号显示输出。是加引号还是不加引号?你知道一个人回答问题的方式会有所不同。很抱歉,我把它弄糊涂了。你怎么忘了在aReplace周围加引号了。@l'l-我不需要它们?我为什么要加一个字符串?输出显示他们想要
“aReplace”“
not
aReplace
非常确定OP没有要求添加引号,因为文本中声明“在‘Replace’之前删除28个字母(原文如此),并在‘Replace’之前添加字母‘a’”。我们永远不知道,但清楚地显示了
,因此输出应该是“aReplace”
带引号您的表达式假设27个字符从一行的开头开始^——我认为问题中没有明确说明这一点。