One-liner Perl ini akan menampilkan penggantian nama yang diperlukan:
perl -e 'open $f[$_-1], "file$_.txt" for 1,2; print "rename @n\n" while chomp(@n = map ''.<$_>, @f)'
Jika ini berhasil untuk Anda, ganti print
pernyataan dengan nama asli dan gunakan
perl -e 'open $f[$_-1], "file$_.txt" for 1,2; rename @n while chomp(@n = map ''.<$_>, @f)'
untuk melakukan penggantian nama yang sebenarnya.
Anda dapat menggunakan paste
untuk memformat file berdampingan:
$ paste -d" " file1.txt file2.txt
/etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
/etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
/etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
/etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
/etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0
Misalnya:
$ paste -d" " file1.txt file2.txt | while read from to; do echo mv "${from}" "${to}"; done
mv /etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0
mv /etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0
mv /etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0
mv /etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0
mv /etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0
Tentu saja Anda ingin melakukan beberapa pemeriksaan keamanan ([ -f "${from}" ]
, ...).
Penafian:Hanya berfungsi jika tidak ada spasi di nama file Anda.
paste -d " " file1.txt file2.txt
berfungsi dengan baik untuk pekerjaan ini.
Namun jika Anda menangani file teks di lingkungan Windows dan menggunakan pasta GNU, pastikan untuk mengubah file ke format Unix (CR) dan jangan gunakan file dengan (CR-LF).
Pasta GNU tampaknya tidak menangani format DOS dengan benar dan parsing tidak dapat diprediksi. Keluaran yang diharapkan tidak menentu dan tidak terduga tanpa peringatan.
Anda dapat menggunakan gVim untuk mengubahnya dengan mudah (menu Edit → Pengaturan File → Format Berkas ).