2011-04-26 47 views

回答

27

這將做到這一點。如果你對每個文件做同樣的文字,你可以使它更有效率......

for f in *; do 
    echo "whatever" > tmpfile 
    cat $f >> tmpfile 
    mv tmpfile $f 
done 
+0

+1 ..更好的解決方案比我:) – Cfreak 2011-04-26 21:33:31

+9

兩個'$ F'應該是' 「$ F」'。也可以做一些錯誤檢查。此外,它還會更改原始文件的權限和所有權。 – ikegami 2011-04-26 21:38:41

0

這應該是個訣竅。

FOLDER='path/to/your/folder' 
TEXT='Text to prepend' 
cd $FOLDER 
for i in `ls -1 $FOLDER`; do 
    CONTENTS=`cat $i` 
    echo $TEXT > $i # use echo -n if you want the append to be on the same line 
    echo $CONTENTS >> $i 
done 

我不會推薦這樣做,如果你的文件非常大雖然。

+0

這是一個無用的'ls'例子。使用shell擴展。 – ghostdog74 2011-04-27 00:04:24

0

你可以做到這一點還有:

for f in *; do 
    cat <(echo "someline") $f > tempfile 
    mv tempfile $f 
done 

這不是從第一後太大的不同,但確實表明如何看待「回聲」語句作爲文件的輸出,而無需創建一個temporay文件存儲該值。

5

你可以做到這一點使用在1單命令以及

for f in *; do 
    sed -i.bak '1i\ 
    foo-bar 
    ' ${f} 
done 
18

你可以做這樣的sed沒有環和cat

sed -i '1i whatever' * 

,如果你想備份您的文件,請使用-i.bak

或使用awk

awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' * 
+0

你的sed comman似乎只在第一個文件 – Raffael 2014-12-18 17:15:42

+0

的前面加上字符串,對我來說就像是一個魅力 – 2015-09-24 09:19:07

0

您可以使用ed命令沒有臨時文件做,如果你喜歡:

for file in *; do 
    (test ! -f "${file}" || test ! -w "${file}") && continue    # sort out non-files and non-writable files 
    if test -s "${file}" && ! grep -Iqs '.*' "${file}"; then continue; fi # sort out binary files 
    printf '\n%s\n\n' "FILE: ${file}" 
    # cf. http://wiki.bash-hackers.org/howto/edit-ed 
    printf '%s\n' H 0a "foobar" . ',p' q | ed -s "${file}" # dry run (just prints to stdout) 
    #printf '%s\n' H 0a "foobar" . wq | ed -s "${file}"  # in-place file edit without any backup 
done | less 
0

這是我所制定了最簡單的。

sed -i '1s/^/Text加入當時的新file\n/' /file/to/change

相關問題