Pertanyaan Cara menghapus string mengikuti kata tertentu


Saya mencoba menghapus string yang dimulai dengan kata tertentu dalam file manifes saya. File yang berisi garis seperti:

<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" **publicKeyToken="1fc8b3b9a1e18e3b**"></assemblyIdentity>

Saya ingin menghapus publicKeyToken = "1fc8b3b9a1e18e3b" darinya.

Aku melakukannya: sed -e "s/publicKeyToken=\"[0-9]*[a-z]*\*//g", tapi tidak ada yang berubah. Saya tidak bisa menggunakan publicKeyToken = "1fc8b3b9a1e18e3b" untuk mengganti, karena isi antara "" dapat berubah.

Adakah yang tahu cara yang benar untuk melakukannya?


2
2018-05-08 21:16


asal


Apakah sebenarnya ada tanda bintang di antara atribut publicKeyToken, atau apakah Anda menambahkan mereka untuk mencoba menekankannya? - doppelgreener
Silakan lihat: Apa yang harus saya lakukan ketika seseorang menjawab pertanyaan saya? - Cyrus
Tanda bintang di antara atribut publickeytoken adalah untuk menekankannya. Terima kasih. - user1558064


Jawaban:


Saat menggunakan perintah Sed yang Anda butuhkan -i untuk mengubah file. Tanpa Anda -i itu akan dicetak ke stdout dan Anda dapat memeriksa untuk melihat apakah perintah akan bekerja untuk Anda.

mencoba sed -i "s/publicKeyToken=\"[0-9][a-z]*//g" 

Juga, ada perintah untuk menghapus garis yang dimulai dengan sesuatu. jika Anda ingin menghapus baris publicKeyToken yang dapat Anda gunakan

sed -i '/pattern to match/d' ./infile yaitu sed -i '/publicKey/d' yourfile.text Situs ini memiliki beberapa bantuan baik tentang apa yang dilakukan perintah, Sed membantu

Lihat juga Stack overflow jawaban untuk menghapus garis


3
2018-05-08 21:32





Saya sangat tidak menyarankan Anda menggunakan regex untuk memanipulasi XML. Ada alat lain di luar sana yang dapat membantu Anda lebih baik daripada sed dapat, setidaknya untuk hal ini. Salah satu alat tersebut sangat bagus Toolkit XMLStarlet. Ini tersedia di bawah Windows, Linux dan MacOS.

Yang mengatakan, jika Anda masih ingin terus menggunakan sed, maka satu hal yang saya segera lihat yang menyebabkan masalah ini sedikit di sini: [0-9]*[a-z]*. Hanya cocok dengan teks yang dimulai dengan nol atau lebih banyak angka diikuti dengan nol atau lebih banyak huruf. Yang Anda butuhkan adalah [0-9a-f]{16}.

Lihatlah kotak pasir Regex ini. Mereka hebat untuk menguji regex Anda:

http://www.regexr.com/

http://www.rubular.com/

http://regexpal.com/



2
2018-05-08 21:37