2014-03-02 134 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