Saya memiliki daftar alamat memori acak yang disimpan dalam file teks, dan saya harus sed
mengeluarkannya, mendekodekannya, dan menyimpannya kembali ke file saya. Namun, operasi decoding yang saya coba lakukan ditangani dalam program C ++ yang saya buat beberapa waktu lalu. Masalah yang saya temui sekarang adalah mengeksekusi C ++ dalam sed
perintah; yaitu, saya ingin kembali merujuk bagian yang perlu diterjemahkan dan menggunakannya sebagai argumen dalam program C ++ saya. Saya telah menulis perintah berikut:
cat $1 | sed -r 's/(0[Xx])([0-9A-Za-z]{1,8})/\1`./convAddrs \2`/g';
sebelumnya saya sempat membaca jawaban di postingan ini yang mengatakan bahwa sed
TIDAK menjalankan perintah. Benarkah itu sed
tidak memungkinkan eksekusi perintah? Jika demikian, dengan asumsi perintah yang saya tulis adalah sed
urutan yang valid , bagaimana saya akan menuliskannya perl
?
sumber
Jawaban:
perl -pe
: sepertised
: memproses input satu baris pada satu waktu$_
, mengevaluasi perl [e] xpression yang diteruskan ke-e
untuk setiap baris dan [p] memecah yang dimodifikasi$_
untuk masing-masing.s|X|Y|gei
: PenggantiY
untukX
di$_
([g] lobally, kasus [i] nsensitively, dan memperlakukanY
sebagai perl [e] Xpression bukan string dasar).(?<=0x)
: lihat di belakang0x
.[0-9a-f]{1,8}
: satu hingga 8 digit hex, sebanyak mungkin`./convAddrs $&`
: ganti dengan output dari baris perintah shell di mana$&
digantikan oleh bagian yang cocok.sumber
/
sini karena digunakan di dalam bagian pengganti. Dikoreksi.Mungkin benar atau tidak benar yang
sed
tidak dapat menjalankan perintah. Itu tidak benar untuk GNUsed
:Tidak jelas bagi saya apa lagi yang mungkin ada dalam
<$1
masukan Anda , jadi saya berhati-hati untuk#
mengomentari apa pun yang tidak adacommand \2
dalam ruang pola. Ketika Anda menggunakane
flag xecute GNU pada suatus///
ubstitusi, ia melewatkan seluruh ruang pola yang dihasilkan$SHELL -c
sebagai argumen kedua, dan kemudian menggantikan semua ruang pola dengan apa pun yang ditulis ke$SHELL
stdout itu. Jadi saya di atas saya mencetak apa pun hasil Anda sebelumnya, dan kemudian setelah hasil melewati command-line ke shell.sumber