GNU/Linux >> LINUX-Kenntnisse >  >> Linux

fügen Sie den Inhalt einer Datei in eine andere ein (in einer bestimmten Zeile der gesendeten Datei) - BASH/LINUX

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

Linux
  1. Verwenden von Google Drive über die Linux-Befehlszeile

  2. Wie fügt man Text vor der ersten Zeile einer Datei ein?

  3. Löschen bestimmter Zeilen aus einer Datei in der Linux-Befehlszeile

  4. 4 Tools zum Herunterladen einer beliebigen Datei über die Befehlszeile in Linux

  5. Linux - Prüfen Sie, ob am Ende einer Datei eine leere Zeile steht

So zeigen Sie den Inhalt eines Archivs oder einer komprimierten Datei unter Linux an

Zeigen Sie den Inhalt einer Datei in der Linux-Befehlszeile an

5 Befehle zum Anzeigen des Inhalts einer Datei in der Linux-Befehlszeile

Wie füge ich mit sed Text in die erste Zeile einer Datei ein?

Wie lösche ich den Inhalt einer Datei über die Befehlszeile?

Linux - grep von bestimmten Zeilen bis zum Ende der Datei