Tähän kysymykseen on jo annettu vastauksia :
Kommentit
- Haluat sed, et grep. Lisäksi ' käytät " smart " lainauksia, joten grep etsii kirjaimellinen merkkijono
“string”
, lainausmerkit mukaan lukien. Haluat"string"
(tai todennäköisesti vielä parempaa,'string'
, ellet aio käyttää parametrilaajennusta hakutermissä). -
grep
ei ' t käytetä merkkijonojen korvaamiseen. Sitä ' käytettiin merkkijonojen etsimiseen. Niiden korvaamiseen tarvitaansed
taiawk
. - Joten olisiko se jotain
- sed – rekursiivinen –ignore-case " merkkijono ", " korvaava -merkkijono "
- Aiheeseen liittyvä: etsi ja korvaa grepillä (ei sedillä) – kuitenkin voisit käyttää
grep --recursive --files-with-matches
rakennettaaksesi luettelon tiedostojen nimistä, jotka välitetäänsed
Vastaa
Kokeile tätä komentoa
grep -rl "wavbyte" somedir/ | xargs sed -i "s/wavbyte/gitship/g"
Voit kokeile find
ja sed
find /some_path -type f -exec sed -i "s/oldstring/newstring/g" {} \;
kommentteja
- Korvataanko " matchstring " uudella tai vanhalla merkkijonolla ja mitä jos haluan tehdä se palvelimen juurihakemistosta?
- Esimerkiksi, jos korvaan " wavbyte " kanssa " gitship " olisiko se Ubuntu-palvelimen juurihakemisto:
- etsi / -type f -exec sed -i ' s / wavbyte / gitship / g ' {} \;
- Oikea, mutta wavbyte on palvelimen monissa eri paikoissa. Kuinka aion muistaa kaikki nuo sijainnit ja mennä sitten käsin ja vaihtaa gitshipiksi?
- Jatka jatka tätä keskustelua chatissa .