Anda dapat menggunakan perl satu baris seperti yang Anda lakukan dengan sed, dengan keuntungan ekspresi reguler perl penuh dukungan (yang jauh lebih kuat daripada yang Anda dapatkan dengan sed). Ada juga variasi yang sangat sedikit di seluruh platform * nix - perl umumnya adalah perl. Jadi Anda bisa berhenti mencemaskan tentang bagaimana membuat versi sistem Anda sed melakukan apa yang Anda inginkan.
Dalam hal ini, Anda bisa melakukannya
perl -pe 's/(regex)/\n$1/'
-pe
menempatkan perl ke dalam loop "eksekusi dan cetak", seperti mode operasi normal sed.
'
mengutip yang lainnya sehingga shell tidak akan mengganggu
()
mengelilingi regex adalah operator pengelompokan. $1
di sisi kanan substitusi mencetak apa pun yang cocok di dalam tanda kurung ini.
Akhirnya, \n
adalah baris baru.
Terlepas dari apakah Anda menggunakan tanda kurung sebagai operator pengelompokan, Anda harus keluar dari tanda kurung yang ingin Anda cocokkan. Jadi ekspresi reguler untuk mencocokkan pola yang Anda cantumkan di atas akan menjadi seperti ini
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
atau \)
cocok dengan tanda kurung literal, dan \d
cocok dengan digit.
Lebih baik:
\(\d{3}\)\d{3}-\d{4}
Saya membayangkan Anda bisa mengetahui apa yang dilakukan angka-angka di kawat gigi.
Selain itu, Anda dapat menggunakan pembatas selain / untuk ekspresi reguler Anda. Jadi jika Anda perlu mencocokkan / Anda tidak perlu menghindarinya. Salah satu dari berikut ini setara dengan ekspresi reguler di awal jawaban saya. Secara teori, Anda dapat mengganti karakter apa pun untuk standar /.
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Beberapa pemikiran terakhir.
menggunakan -ne
alih-alih melakukan -pe
tindakan serupa, tetapi tidak secara otomatis mencetak di akhir. Ini bisa berguna jika Anda ingin mencetak sendiri. Misalnya, ini grep-alike ( m/foobar/
adalah pertandingan regex):
perl -ne 'if (m/foobar/) {print}'
Jika Anda merasa berurusan dengan baris baru merepotkan, dan Anda ingin menangani hal itu secara ajaib, tambahkan -l
. Tidak berguna untuk OP, yang bekerja dengan baris baru.
Tip bonus - jika Anda memiliki paket pcre yang terinstal, itu disertakan pcregrep
, yang menggunakan regex lengkap yang kompatibel dengan perl.
sed '/regex/G'