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?

penjepit
sumber

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