GNU/Linux >> Belajar Linux >  >> Linux

masukkan isi file ke yang lain (di baris tertentu dari file yang dikirim) -BASH/LINUX

Saya mungkin akan menggunakan sed untuk pekerjaan ini:

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

Jika Anda ingin menimpa file1 dan Anda memiliki GNU sed , tambahkan -i pilihan. Jika tidak, tulis ke file sementara lalu salin/pindahkan file sementara ke file asli, bersihkan seperlunya (yaitu trap barang di bawah). Catatan:menyalin sementara di atas file mempertahankan tautan; bergerak tidak (tetapi lebih cepat, terutama jika filenya besar).

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

Hanya untuk bersenang-senang, dan hanya karena kita semua menyukai ed , editor standar, ini adalah ed Versi:kapan. Ini sangat efisien (ed adalah asli editor teks)!

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

Jika nomor baris disimpan dalam variabel line lalu:

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

Hanya untuk menyenangkan Zack, ini satu versi dengan lebih sedikit bashism, jika Anda tidak suka bash (secara pribadi, saya tidak suka pipa dan subkulit, saya lebih suka herestrings, tapi hei, seperti yang saya katakan, itu hanya untuk menyenangkan Zack):

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

atau (untuk menyenangkan Sorpigal):

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

Seperti yang disebutkan Jonathan Leffler dalam komentar, dan jika Anda bermaksud menggunakan metode ini dalam skrip, gunakan heredoc (biasanya yang paling efisien):

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

Semoga ini bisa membantu!

P.S. Jangan ragu untuk meninggalkan komentar jika Anda merasa perlu mengekspresikan diri tentang cara mengemudi ed , editor standar.


cat file1 >>file2

akan menambahkan konten file1 ke file2.

cat file1 file2

akan menggabungkan file1 dan file2 dan mengirim keluaran ke terminal.

cat file1 file2 >file3

akan membuat atau menimpa file3 dengan penggabungan file1 dan file2

cat file1 file2 >>file3

akan menambahkan gabungan file1 dan file2 ke akhir file3.

Edit :

Untuk trunking file2 sebelum menambahkan file1:

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

atau untuk membuat file 500 baris:

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

Linux
  1. Cara Menampilkan Baris Tertentu dari File di Baris Perintah Linux

  2. Buat file dengan menggunakan baris perintah di Linux

  3. 4 alat untuk mengunduh file apa pun menggunakan baris perintah di Linux

  1. Salin konten file ke clipboard di terminal Linux

  2. Bagaimana cara memasukkan teks ke baris pertama file menggunakan sed?

  3. Bagaimana cara menghapus konten file dari baris perintah?

  1. Salin dan tempel di baris perintah Linux dengan xclip

  2. Penggunaan lanjutan dari penampil file teks yang lebih sedikit di Linux

  3. Linux - grep dari baris tertentu ke akhir file