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.
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:
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 -i
memberitahu sed
untuk menulis perubahan secara langsung .ignore
, bukan hanya mengeluarkannya
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
.
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.
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