GNU/Linux >> Belajar Linux >  >> Linux

Mengganti Pola Setelah Kecocokan Ke-N Ditemukan Di Setiap Baris??

Pertanyaan ini sudah memiliki jawaban di sini :sed:menghapus semua kemunculan string kecuali yang pertama

(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

Linux
  1. Pencocokan Pola Multiline Menggunakan Sed, Awk Atau Grep?

  2. Sed:Cetak Hanya Kejadian Pertama Dari Kecocokan Pola?

  3. Sed:Sisipkan Teks Setelah Karakter Ke-N Mendahului/mengikuti String yang Diberikan?

  1. Sed Pada Osx Masukkan Pada Garis Tertentu?

  2. Di Bash, bagaimana cara menambahkan string setelah setiap baris dalam file?

  3. sed untuk memasukkan hanya pada pertandingan pertama

  1. Konsep 'Hold space' dan 'Pattern space' di sed

  2. sed - menyisipkan baris setelah baris X setelah pertandingan

  3. Tampilan cocok ditemukan atau tidak menggunakan awk