2013-10-14 67 views
-2

我需要替换文件每一行中的特定范围的字符。使用Perl或sed替换固定位置的字符字段

我想这

perl -i -pe 'r77,79c/XXX/g' file 

我试图在77更改为79个字符使用Perl XXX,但上面的代码是行不通的。

+0

你想替换文件中的每一行,还是整个文件? –

+1

你真的认为'r77,79c/XXX/g'是有效的Perl吗? – Borodin

+0

其实我想搜索一个文件中的模式,并且任何匹配该模式的行需要被替换为第50和第51个字符到XX。 –

回答

1
perl -i -pe 's/.{76}\K.../XXX/' file 
+0

你不需要's'修饰符吗? – Kenosis

+1

@Kenosis:这个被应用到文件中的每一行*,所以除非有数据行少于79个字符,如果是的话,新行应该被覆盖,那么'/ s'是不必要的。 – Borodin

+0

@Borodin - 明白了。再次感谢你。 – Kenosis

2

你想用XXX替换位置[77-79]的字符?

尝试

perl -i -piorig_* -e "substr($_,76,3)=XXX" file 

称为orig_file备份文件将被创建防止可能dataloss的原因..

+0

这就是我要做的,但*“第77到第79”*字符更可能是'substr($ _,76,3)'。使用'substr'作为l值经常被忽略。 – Borodin

+0

是^^哈哈;)对不起,那个故障:) –

+0

不用担心:轻松完成。这就是SO应该如何工作。 – Borodin

1

您写道:

Actually i want to search a pattern in a file and whatever lines matching that pattern needs to be replaced to 50th & 51st character to XX

使用SED:

sed -r '/pattern/s/^(.{49})..(.*)$/\1XX\2/' file 
0
sed "/pattern/ s/^\(.\{49\}\)../\1XX/" YourFile 

我们不碰结尾