Ich habe eine Anforderung, bei der ich, wenn eine bestimmte Bedingung erfüllt ist, den gesamten Inhalt einer Datei in dieselbe Datei duplizieren muss. Hier ist die Datei:
$ cat in.txt
ip
10.22.1.34
10.22.1.35
Wenn eine Bedingung erfüllt ist, zum Beispiel
if [[ d=1 ]]; then
copy the file content
fi
der Inhalt der Datei sollte wie folgt dupliziert werden:
ip
10.22.1.34
10.22.1.35
ip
10.22.1.34
10.22.1.35
Antwort1
Sie können Dateiinhalte in Variablen speichern (es werden Zeilenumbrüche gespeichert) und diese dann an dieselbe Datei anhängen. Denken Sie daran, Variablen in Anführungszeichen zu setzen.
x=$(cat test.txt) && echo "$x" >> test.txt
Oder verwenden Sie den Befehl „tee“, um direkt an dieselbe Datei anzuhängen. Lassen Sie sich nicht verwirren, wenn in der Standardausgabe zuerst der Originalinhalt der Datei angezeigt wird, denn gleichzeitig wird der tatsächliche Inhalt der Datei dupliziert.
cat test.txt | tee -a test.txt
Wenn Sie nicht möchten, dass die Ausgabe von tee sichtbar ist, können Sie natürlich Folgendes tun:
cat test.txt | tee -a test.txt > /dev/null
Antwort2
Sie können beispielsweise Folgendes tun:
cat in.txt > /tmp/tmp.txt && cat /tmp/tmp.txt >> in.txt
Antwort3
A cat file.txt >> file.txt
sollte funktionieren, >>
hängt den Inhalt von stdout am Ende der angegebenen Datei an
Antwort4
Sie können versuchen cat
, die Datei zu tingen und dann mit sed einen Anhang anzufügen. Also etwa so:
cat in.txt
ip
10.22.1.34
10.22.1.35
d=1
if [ ${d} -eq 1 ]; then
cat in.txt | while read LINE; do sed -i '$a\'"${LINE}" in.txt; done
fi
cat in.txt
ip
10.22.1.34
10.22.1.35
ip
10.22.1.34
10.22.1.35