Grep: cari dan ganti baris penuh


13

Perintah

 grep "foo" myfile.txt

mencetak semua baris yang cocok di file saya.

Sekarang saya ingin mengganti baris penuh dengan string lain. Bagaimana saya bisa melakukan itu?

Jawaban:


13

Jika Anda mencocokkan substring dari seluruh baris, Anda bisa menggunakan sperintah sed dengan regex untuk menghapus sisa baris:

sed -i 's/^.*foo.*$/another string/' myfile.txt

atau gunakan cperintah untuk mengganti baris yang cocok dalam sekali jalan:

sed -i '/foo/ { c \
another string
}' myfile.txt

Jika Anda tidak ingin mengetikkan perintah multiline saat diminta, Anda dapat memasukkannya ke dalam skrip:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt

Terima kasih! ketika saya menggunakan opsi kedua saya mendapatkan: sed: -e ekspresi # 1, char 0: `{'
clamp

di akhir baris pertama, Anda perlu mengetikkan \ dan kemudian tekan Return - penting bahwa \ lolos dari baris baru pertama itu. Kemudian, pastikan }'ada pada baris yang terpisah dari another string: penggantian adalah segalanya pada baris kedua, termasuk }jika Anda menaruhnya di sana.
berguna

-1

Anda dapat menggunakan inplace functionnality dari sed :

sed -i -e 's/foo/bar/' myfile.txt

Ini hanya akan menggantikan setiap foodengan barbukan seluruh baris ..
Jahid
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.