Bagaimana saya bisa mengganti teks setelah kata tertentu menggunakan sed?


12

Saya memiliki file bernama .ignore. Perlu diganti projdir. Sebagai contoh:

ignore \..*
ignore README
projdir Snake

Saya perlu mengganti Snake dengan, misalnya, "PacMan". Saya membaca halaman manual, tetapi saya tidak tahu harus berbuat apa.

Jawaban:


18

Cari baris yang dimulai dengan projdir, dan ganti seluruh baris dengan yang baru:

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^dan $merupakan penanda awal / akhir garis, sehingga polanya akan cocok dengan seluruh garis; .*cocok dengan apa pun. The -imemberitahu seduntuk menulis perubahan secara langsung .ignore, bukan hanya mengeluarkannya


5

Salah satu pendekatan adalah menulis ulang seluruh baris, menggunakan referensi kembali untuk bagian yang ingin Anda pertahankan:

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

Pendekatan lain adalah menulis ulang bagian dari baris tersebut, tetapi hanya jika beberapa bagian lainnya cocok:

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

Kedua contoh menulis ulang kata dipisahkan spasi putih pada baris di mana kata pertama berada projdir.


3

Meskipun ini adalah pos lama dan tampaknya dipecahkan untuk Anda dengan jawaban yang diterima, pertanyaan sebenarnya belum dijawab. Jadi untuk kelengkapan dan untuk membantu orang lain:

Di sini jawaban yang benar-benar cocok untuk "Ular" dan bukan untuk garis yang dimulai dengan "projdir" ...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

Ini menggantikan semuanya dari awal baris termasuk "Snake" dengan semuanya sebelum "Snake" + "PacMan". \ 1 adalah singkatan dari apa yang cocok di dalam (). Semuanya setelah "Ular" tetap tidak tersentuh.


1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdir adalah untuk menemukan baris yang dimulai dengan string projdir. The. * $ Di sana adalah singkatan dari string after projdir pada baris yang sama. String projdir PacMan adalah string yang kami gantikan. g adalah untuk global - untuk mengganti semua baris yang dimulai dengan projdir. .ignore adalah nama file


1
Bisakah Anda memperluas jawaban Anda dan menjelaskan apa itu?
Romeo Ninov

Jawaban jauh lebih berguna jika mereka menyertakan penjelasan untuk bagaimana dan mengapa suatu perintah atau sepotong kode berfungsi.
Anthony Geoghegan

Saya harap ini lebih bermanfaat setelah diedit
Tinu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.