2017-02-01 35 views
2

我有文件的列表,從運行此命令如何更換使用中發現的每個文件的第一行「查找」

find . -type f -name ".txt" 

我要替換文件的第一行找到替代第一線這個文本「1號線」

做我的研究,我發現了一個方法來刪除與

ex -sc '1d|x' file.txt 

第一線,然後在前面加上一個文件

echo "line 1"|cat - file.txt > out && mv out file.txt 

,但我不知道如何刪除第一行和前插爲每個文件中發現

+0

您是否嘗試過使用exec命令? –

回答

4

您可以使用exec

find . -name "*.txt" -exec sed -i .ORI '1s/.*/line 1/' {} \; 

到位節省備份編輯的文件作爲.ORI

+0

它有一個錯誤| sed:-e表達式#1,字符1:未知命令:'。' –

+0

嘗試在'.ORI'之前刪除空格或僅刪除此參數(但不會有備份)。有許多具有各種特質的「sed」方言。如果您需要將腳本移植到各種平臺,可以切換到更好的標準化的Awk或Perl。 – tripleee

+0

我想這可以改爲使用'ex'而不是'sed',但是你知道,我們使用'sed'進行批量/編程編輯是有原因的。 – tripleee

0

您可以使用EXEC或與xargs的查找,但對於更復雜的命令,我總是在一個循環中運行處理。這樣更清楚。這裏是你可以做什麼:

find . -type f -name '*.txt' | while read -r f; do 
    ex -sc '1d|x' "$f" 
    echo "line 1"|cat - "$f" > out && mv out "$f" 
done 
+0

您應該使用'read -r'來避免一些令人討厭的遺留行爲,並在每個地方引用''$ f「'。 – tripleee

+0

無論如何,將'.tmp'加入完整路徑名並不會奏效。 – tripleee

+0

良好的通話引用文件名。恢復爲「out」臨時文件名稱。 – mroach

相關問題