2014-03-02 87 views
0

我想更改文本文件中的特定行。编辑文本文件以更改特定行号的内容

我试图与这

perl -p -i -e "s/JAI/ramkrishna/ if $. == 37" test.tex 

但它仅仅是删除JAI但不写ramkrishna

+1

考虑增加输入你的问题,所以这对我们来说是比较容易来帮助你,例如'echo“abcJAIxyx”| perl -i ...'发生了什么?祝你好运。 – shellter

+2

适合我:'{seq 36;回声你好JAI世界; } | perl -p -e“s/JAI/ramkrishna/if $。== 37”' - 你肯定** JAI出现在第37行?如果'仍然不能正常工作,并且你已经在Windows上创建了你的文件并将它移动到了Unix/Linix,那么可以使用'perl -ne'print'$。$ _''test.tex' –

+0

'\ r \ n'从Windows中结束,并且需要将它们转换为Linux使用的'\ n'行结尾。 'dos2unix test.tex'会解决这个问题。祝你好运。 – shellter

回答

1

你的命令工作得很好。我猜你的行号错了?

随着test.tex文件中像这样

aa 
bb 
cc 
aa bb cc JAI dd ee ff 
bb 
cc 
aa bb cc JAI dd ee ff 
xx 
yy 
zz 

命令

perl -p -i -e 's/JAI/ramkrishna/ if $. == 7' test.tex 

更改文件

aa 
bb 
cc 
aa bb cc JAI dd ee ff 
bb 
cc 
aa bb cc ramkrishna dd ee ff 
xx 
yy 
zz 
+0

谢谢。它的工作。也许那时候我正在做一些令人讨厌的事情。 – ramkrishna

+0

现在我想用用户输入更改行号,如 count = 7 perl -p -i -e's/JAI/ramkrishna/if $。 == $ count'test.tex 但它不起作用。 – ramkrishna

+0

@ramkrishna:你如何设置'count'?它是一个环境变量吗?你可以通过'%ENV'来访问它们。尝试'count = 7 perl -e'print $ ENV {COUNT}''。 – Borodin

1
sed '37s/JAI/ramkrishna/' filename 
+0

谢谢。它的工作。 现在我想更改行号与用户输入,如计数= 7 sed的“(” $计数“)S/JAI /拉玛克里斯纳/”文件名 但其不工作。 – ramkrishna