Pertanyaan ini sudah memiliki jawaban di sini :sed:menghapus semua kemunculan string kecuali yang pertama
(4 jawaban)
Tutup 2 tahun lalu.
Linux
(4 jawaban)
Tutup 2 tahun lalu.
Saya memiliki file yang berisi baris:
india;austria;japan;chile
china;US;nigeria;mexico;russia
Saya ingin mengganti semua kemunculan titik koma pada setiap baris dengan mis. ;NEW;
, tetapi mulai dari kejadian ke-2 saja. Hasilnya akan terlihat seperti ini:
india;austria;NEW;japan;NEW;chile
china;US;NEW;nigeria;NEW;mexico;NEW;russia
Saya mencoba ini dengan gsub, tetapi menggantikan semua kejadian:awk '/;/{gsub(/;/,";NEW;") }{print}'
Jawaban yang Diterima:
awk
solusi jauh lebih lama, tetapi lebih mudah untuk membuatnya generik:
awk -F; '{for(i=1;i<NF;i++)printf"%s;%s",$i,(i>=2)?"NEW;":"";print$NF}' replacefile
Apakah mungkin untuk melakukannya dengan sed
juga, membuat loop dengan t
perintah dan selalu mengganti pemisah ke-2 (atau mana pun yang Anda inginkan) menjadi beberapa tanda sementara (biasanya n
):
sed ':b;s/;/n/2;tb;s/n/;NEW;/g' replacefile