2013-03-01 52 views
34

我想添加一個特定的行,可以說avatarMakeFile開頭的文件和應該添加到文件的第15行。在Linux的某一行添加文本到文件

這是如何文本添加到文件:

echo 'avatar' >> MakeFile.websvc 

,這是如何將文本添加到與生成文件開頭的文件,我想:

echo 'avatar' >> *MakeFile. 

但我不能設法增加這行到文件的第15行。

+0

第二個例子是錯誤的。您需要遍歷文件並分別爲每個文件添加一行。如果你想在文件中間添加文本,你需要遍歷文件的內容並在你到達正確的位置時插入你的東西。 – 2013-03-01 12:28:13

回答

53

您可以使用sed來解決這個問題:

sed "15i avatar" Makefile.txt 

或使用-i選項保存對文件所做的更改。

sed -i "15i avatar" Makefile.txt 

要改變之初即開始Makefile中的所有文件:

sed "15i avatar" Makefile* 

注:在上面的15是你感興趣的線放置文本。

0
perl -pi -e 'if($.==14){s/\n/\navatar\n/g}if(eof){$.=0}' MakeFile* 
2

使用的sed:

sed -i '15i\avatar\' Makefile* 

其中-i選項表明發生轉換就地(當你要處理多個文件,這是例如有用)。另外,在你的問題中,* MakeFile表示'所有以MakeFile結尾的文件',而'以MakeFile開頭的所有文件'表示爲MakeFile *。

2

如果你需要的字符串和行號選項的腳本通過,試試這個:

perl -i -slpe 'print $s if $. == $n; $. = 0 if eof' -- -n=15 -s="avatar" Makefile* 

-i編輯輸入文件,不進行備份
$.是行number

這是基於我對Insert a line at specific line number with sed or awk的解決方案,它包含幾個將選項傳遞給Perl的其他方法,以及對命令行選項的解釋。

1

如果你想要一個更便攜的版本,你可以使用ex,這將工作在任何 *尼克斯系統。 (這是specified by POSIX.)到目前爲止給出的Sed命令取決於GNU Sed。

插入包含什麼,但在當前目錄名稱以每個文件的15號線「阿凡達」線路,使用「Makefile文件。」:

for f in MakeFile.*; do printf '%s\n' 15i 'avatar' . x | ex "$f"; done 
相關問題