
Ich habe zwei Dateien: one.txt
undsample.txt
one.txt
hat folgenden Inhalt:
AAAA
BBBB
CCCC
DDDD
sample.txt
hat einige spezifische Inhalte wie die folgenden:
>>XXXXXXX<<
wie kann ich:
- Ersetzen Sie „XXXXXXX“ durch den Inhalt der ersten Zeile des
one.txt
?“ - Löschen Sie die erste Zeile des
one.txt
? - umbenennen
one.txt
inAAAA.txt
?
in der Linux-Befehlszeile?
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.