Perintah sed saya adalah,
sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf'
Itu harus kembali,
bcde:cdeaf
(Yaitu) semua karakter sebelum titik dua pertama di baris dan titik dua itu sendiri harus dihapus.
Tapi ini tidak menghapus apa pun.
Kebingungan saya muncul terutama karena,
1) Apakah orangtua untuk pencocokan pola harus melarikan diri di dalam regex-es?
2) Dalam kedua kasus (dengan melarikan diri / tanpa escpaing), itu tidak berfungsi. Saya mencoba,
sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'
sed 's/[^:]*://'
. Dan Anda tidakd
menghapus jalur input, omong-omong, Anda memodifikasinya dengans///
perintah ubstitusi. Anda harus mengganti bit pertama yang bukan titik dua dan titik dua yang mengikutinya tanpa apa-apa.printf "%s\n" "${line#*:}"
...while read line
yang mendapat$line
, mungkinsed
harus lebih disukai.Jawaban:
Yang pertama
^
berarti awal dari garis. Ini[^:]
satu-satunya cara saya tahu bagaimana menulis bukan titik dua . Tanda*
titik dua berarti sejumlah hal sebelum saya (dalam hal ini tanda titik dua). Akhirnya,:
memilih usus besar.Dengan kata lain, pilih awal baris, sejumlah hal yang bukan titik dua, dan titik dua pertama.
The
//g
berarti menghapus setiap contoh cocok.sumber
^
memasangg
saingan , kecuali karena Anda juga menambahkan bendera lobal. hanya akan pernah ada satu kemunculan pola yang pertama, sehinggag
bendera lobal tidak menghapus semua[^:]*:
pola dari suatu garis, seperti yang akan terjadi jika Anda tidak^
mengikatnya. alih-alih menyulitkan regex dengan dua bendera yang tidak perlu yang hanya berfungsi untuk mengacaukan satu sama lain, Anda bisa mengabaikannya, yang ditunjukkan oleh versi yang diedit dari jawaban ini sebelum Anda mengembalikannya. mengapa Anda bersikeras menyebarkan informasi buruk saya tidak tahu, tetapi ini membuat jawaban yang buruk.sed
keterampilan saya . Saya barused
dan belum nyaman menyimpang dari sintaks yang sangat terbatas yang saya ambil sejauh ini. Itused
(heh), saya pikir jawaban saya memecahkan masalah OP meskipun itu bukan jawaban yang optimal (yaitu, Anda). Ini adalah Stack Exchange, bukan Wikipedia, jadi perbaiki saya jika saya salah, tetapi jika Anda tahu jawaban yang lebih baik Anda harus mempostingnya sehingga orang dapat melihat berbagai pendekatan dan membandingkannya. Tolong jangan mengubah jawaban saya menjadi jawaban Anda dengan fungsi edit .Untuk beroperasi dengan kolom ada
cut
:sama saja
Dan versi lain dengan
sed
(lebih cepat untuk data besar):Dan agak eksotis di
bash
atau
atau
sumber
sed 's/[^:]*://'