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

时间:2014-06-10 22:40:30

标签: regex unix sed terminal cut

我有一个很长的文件,我想在比赛前删除27个字符并在比赛前替换一个字母

example 123456789123456789123456789Replace

所以输出应该是

"aReplace"

(在&#39之前删除28个字母;替换'并在'替换'之前添加字母' a')

我没有使用实际的文件,并且模式太大

3 个答案:

答案 0 :(得分:1)

如果你想要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中 - 它允许您在覆盖输入文件之前确认它按计划工作...

答案 1 :(得分:1)

Perl单行可能会有所帮助。

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

答案 2 :(得分:0)

使用sed:

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

输出:

"aReplace"