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.