Pertanyaan Bagaimana mengganti string secara global dalam garis TIDAK dimulai dengan pola tertentu


Saya ingin secara global mengganti string foo dengan string bar, menggunakan sed. Ini hanya harus dilakukan untuk garis yang TIDAK dimulai dengan string ## Input.

Saya tidak bisa membuatnya berfungsi. Saya mencoba hal-hal seperti ini tetapi mencapai titik di mana saya tidak yakin apakah saya tahu apa yang saya lakukan:

sed -i '/^##Input/ s/foo/bar/g' myfile

Tolong bantu!


32
2018-02-10 05:34


asal


Jawaban:


Anda hanya perlu meniadakan pertandingan menggunakan !:

sed -i '/^##Input/! s/foo/bar/g' myfile

55
2018-02-10 05:48



Anda harus melarikan diri # seperti di \#.


-4
2018-02-10 05:46



Jawaban jelek untuk permintaan jelek (yaitu mereka mendapatkan apa yang mereka minta):

echo \{
for file in *.json; do
    sed -n '/^[\{\}]/! s/\([^\,]\)$/\1,/; /^[\{\}]/!p' $file
done
echo \{

-4
2017-08-01 16:40