wie ersetzt man einen bestimmten Inhalt einer Datei durch die erste Zeile einer anderen Datei?

wie ersetzt man einen bestimmten Inhalt einer Datei durch die erste Zeile einer anderen Datei?

Ich habe zwei Dateien: one.txtundsample.txt

one.txthat folgenden Inhalt:

AAAA
BBBB
CCCC
DDDD

sample.txthat einige spezifische Inhalte wie die folgenden:

>>XXXXXXX<<

wie kann ich:

  1. Ersetzen Sie „XXXXXXX“ durch den Inhalt der ersten Zeile des one.txt?“
  2. Löschen Sie die erste Zeile des one.txt?
  3. umbenennen one.txtin AAAA.txt?

in der Linux-Befehlszeile?

Bildbeschreibung hier eingeben

Antwort1

Hier ist eine Möglichkeit:

## save the first line of one.txt in the variable $string
string=$(head -n1 one.txt)
## delete the first line of one.txt
sed -i '1d' one.txt
## replace the Xs in `>>XXXXX<<` with the contents of `$string` 
## and save as the new file "$string.txt" (AAAA.txt)
sed "s/>>XXXXXXX<</>>$string<</" sample.txt > $string.txt

>>XXXXXX<<Beachten Sie, dass davon ausgegangen wird, dass in jeder Zeile von nur ein Vorkommen von vorkommt sample.txt. Wenn es mehr als eins pro Zeile geben kann, ersetzt der obige Befehl nur das erste in jeder Zeile. Um alle zu ersetzen, verwenden Sie stattdessen Folgendes:

sed "s/>>XXXXXXX<</>>$string<</g" sample.txt > $string.txt

Ihre ursprüngliche Frage enthielt am Ende jeder Zeile in Leerzeichen one.txt. Wenn dies bei Ihrer echten Datei der Fall ist und Sie die Leerzeichen entfernen müssen, bevor Sie zu hinzufügen sample.txt, verwenden Sie Folgendes:

string=$(head -n1 one.txt | sed 's/ *$//')

Anschließend die gleichen Befehle wie oben.

verwandte Informationen