GNU/Linux >> Linux Esercitazione >  >> Linux

inserire il contenuto di un file in un altro (in una riga specifica del file che viene inviato)-BASH/LINUX

Probabilmente userei sed per questo lavoro:

line=3
sed -e "${line}r file2" file1

Se stai cercando di sovrascrivere file1 e hai GNU sed , aggiungi il -i opzione. Altrimenti, scrivi su un file temporaneo e poi copia/sposta il file temporaneo sull'originale, ripulendo se necessario (questo è il trap cose sotto). Nota:la copia del temporaneo sul file conserva i collegamenti; lo spostamento no (ma è più veloce, specialmente se il file è grande).

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

Solo per divertimento e solo perché tutti amiamo ed , l'editor standard, ecco un ed versione. È molto efficiente (ed è un genuino editor di testo)!

ed -s file2 <<< $'3r file1\nw'

Se il numero di riga è memorizzato nella variabile line quindi:

ed -s file2 <<< "${line}r file1"$'\nw'

Giusto per compiacere Zack, ecco una versione con meno bashismo, nel caso in cui non ti piaccia bash (personalmente, non mi piacciono i tubi e le subshell, preferisco le corde, ma ehi, come ho detto, è solo per compiacere Zack):

printf "%s\n" "${line}r file1" w | ed -s file2

o (per compiacere Sorpigal):

printf "%dr %s\nw" "$line" file1 | ed -s file2

Come menziona Jonathan Leffler in un commento, e se intendi usare questo metodo in uno script, usa un heredoc (di solito è il più efficiente):

ed -s file2 <<EOF
${line}r file1
w
EOF

Spero che questo aiuti!

P.S. Non esitare a lasciare un commento se ritieni di dover esprimere te stesso sui modi per guidare ed , l'editor standard.


cat file1 >>file2

aggiungerà il contenuto di file1 a file2.

cat file1 file2

concatenerà file1 e file2 e invierà l'output al terminale.

cat file1 file2 >file3

creerà o sovrascriverà file3 con la concatenazione di file1 e file2

cat file1 file2 >>file3

aggiungerà la concatenazione di file1 e file2 alla fine di file3.

Modifica :

Per il trunking file2 prima di aggiungere file1:

sed -e '11,$d' -i file2 && cat file1 >>file2

o per creare un file di 500 righe:

n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2

Linux
  1. Come inserire del testo prima della prima riga di un file?

  2. Come visualizzare righe specifiche di un file nella riga di comando di Linux

  3. Eliminazione di righe specifiche da un file nella riga di comando di Linux

  4. Crea file utilizzando la riga di comando in Linux

  5. Copia il contenuto del file negli appunti nel terminale Linux

Come visualizzare il contenuto di un archivio o di un file compresso in Linux

Visualizza il contenuto di un file nella riga di comando di Linux

Utilizzo di Google Drive dalla riga di comando di Linux

Strumento per ottenere le righe in un file che non sono in un altro?

5 comandi per visualizzare il contenuto di un file nella riga di comando di Linux

Linux:grep da determinate righe alla fine del file