Regex 删除匹配模式前的28个字符并替换为字母
我有一个长文件,我想在匹配前删除27个字符,并在匹配前替换一个字母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
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”“
notaReplace
非常确定OP没有要求添加引号,因为文本中声明“在‘Replace’之前删除28个字母(原文如此),并在‘Replace’之前添加字母‘a’”。我们永远不知道,但清楚地显示了,因此输出应该是“aReplace”
带引号您的表达式假设27个字符从一行的开头开始^——我认为问题中没有明确说明这一点。