Saya terjebak dalam memasukkan ekspresi reguler dengan perintah sed.
T: Saya ingin mengganti semua kemunculan dua spasi setelah akhir kalimat dengan hanya satu kali spasi.
Inilah yang saya lakukan:
sed 's/^ $/^$/' file
Dan itu tidak menggantikan dua spasi dengan satu spasi setelah kalimat berakhir.
Output yang saya dapatkan:
This is the output. Hello Hello
Output yang saya inginkan:
This is the output. Hello Hello
text-processing
sed
Zeus
sumber
sumber
Jawaban:
ganti dot diikuti oleh dua spasi atau lebih dengan dot diikuti oleh satu spasi.
sumber
sed -r 's/\.\s+/. /g' file
dengan GNU sed ...sed -E
daripadased -r
. Itu bekerja dengan sed GNU dan sed * BSD (termasuk. Mac OS X) dan beberapa lainnya. Ini dijadwalkan untuk dimasukkan sebagai standar dalam POSIX "segera nyata sekarang".sed -E
kepada seseorang di situs ini yang tidak berfungsi tetapised -r
berfungsi .. Saya telah bekerja dengan GNU sed saja, jadi tidak ada ide tentang POSIX dan variasi lain .. akan mencoba untuk memasukkan detail ini di masa depan , terima kasih :)-E
cukup lama sekarang (sejak setidaknya 2011, tetapi pria dan halaman info masih hanya menyebutkan-r
)sed
Perintah Anda's/^ $/^$/'
tidak akan melakukan apa yang Anda inginkan. Itu hanya mengganti semua baris berisi satu spasi dengan baris berisi^$
.Bergantung pada karakter apa yang menandai akhir kalimat, Anda dapat melakukan:
Ini akan menggantikan 2 ruang atau lebih setelahnya
.
,?
atau!
dengan satu ruang saja.sumber
sed -r 's/([.?!])\s+/\1 /g' file
sed
skrip pengeditan asli akan menggantikan baris apa pun yang berisi spasi tunggal dengan string literal^$
.Ini yang mungkin Anda cari,
Sampel,
Menggunakan
sed
,sumber