Ich würde wahrscheinlich sed
verwenden für diese Stelle:
line=3
sed -e "${line}r file2" file1
Wenn Sie file1
überschreiben möchten und Sie haben GNU sed
, fügen Sie die -i
hinzu Möglichkeit. Schreiben Sie andernfalls in eine temporäre Datei und kopieren/verschieben Sie dann die temporäre Datei über die Originaldatei und bereinigen Sie sie nach Bedarf (das ist die Datei trap
Sachen unten). Hinweis:Beim Kopieren der temporären Datei über die Datei bleiben Links erhalten. Verschieben nicht (aber schneller, besonders wenn die Datei groß ist).
line=3
tmp="./sed.$$"
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed -e "${line}r file2" file1 > $tmp
cp $tmp file1
rm -f $tmp
trap 0
Nur zum Spaß und einfach, weil wir alle ed
lieben , dem Standard-Editor, hier ist ein ed
Ausführung. Es ist sehr effizient (ed
ist ein echtes Texteditor)!
ed -s file2 <<< $'3r file1\nw'
Wenn die Zeilennummer in der Variablen line
gespeichert ist dann:
ed -s file2 <<< "${line}r file1"$'\nw'
Nur um Zack zu gefallen, hier ist eine Version mit weniger Bashismus, falls Sie Bash nicht mögen (ich persönlich mag keine Pipes und Subshells, ich bevorzuge Herestrings, aber hey, wie gesagt, das soll Zack gefallen):
printf "%s\n" "${line}r file1" w | ed -s file2
oder (um Sorpigal zu gefallen):
printf "%dr %s\nw" "$line" file1 | ed -s file2
Wie Jonathan Leffler in einem Kommentar erwähnt, und wenn Sie beabsichtigen, diese Methode in einem Skript zu verwenden, verwenden Sie ein Heredoc (es ist normalerweise das effizienteste):
ed -s file2 <<EOF
${line}r file1
w
EOF
Hoffe, das hilft!
P.S. Zögern Sie nicht, einen Kommentar zu hinterlassen, wenn Sie das Gefühl haben, dass Sie sich dazu äußern müssen, wie man ed
fährt , der Standardeditor.
cat file1 >>file2
fügt den Inhalt von Datei1 an Datei2 an.
cat file1 file2
verkettet Datei1 und Datei2 und sendet die Ausgabe an das Terminal.
cat file1 file2 >file3
erstellt oder überschreibt Datei3 mit Verkettung von Datei1 und Datei2
cat file1 file2 >>file3
wird die Verkettung von Datei1 und Datei2 an das Ende von Datei3 anhängen.
Bearbeiten :
Für das Trunking von Datei2 vor dem Hinzufügen von Datei1:
sed -e '11,$d' -i file2 && cat file1 >>file2
oder um eine Datei mit 500 Zeilen zu erstellen:
n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2