Dette spørsmålet har allerede svar her :
Kommentarer
- Du vil ha sed, ikke grep. Du ' bruker " smarte " anførselstegn, så grep vil søke etter bokstavelig streng
“string”
, inkludert anførselstegn. Du vil ha"string"
(eller sannsynligvis enda bedre,'string'
, med mindre du planlegger å bruke parameterutvidelse i søkeordet). -
grep
isn ' t brukes til å erstatte strenger. Det ' brukes til å finne strenger. For å erstatte dem trenger dused
ellerawk
. - Så ville det være noe sånt som
- sed –recursive –ignore-case " streng ", " erstatning -streng "
- Relatert: søk og erstatt med grep (ikke sed) – dog du kunne bruke
grep --recursive --files-with-matches
til å lage en liste over filnavn som skal sendes tilsed
Svar
Prøv denne kommandoen
grep -rl "wavbyte" somedir/ | xargs sed -i "s/wavbyte/gitship/g"
Du kan prøv find
og sed
find /some_path -type f -exec sed -i "s/oldstring/newstring/g" {} \;
Kommentarer
- Skifter jeg " matchstring " med den nye eller gamle strengen og hva om jeg vil å gjøre det fra rotkatalogen til serveren?
- For eksempel hvis jeg erstatter " wavbyte " med " gitship " fra rotkatalogen til Ubuntu-serveren ville det være:
- finn / -type f -exec sed -i ' s / wavbyte / gitship / g ' {} \;
- Riktig, men wavbyte er mange forskjellige steder i serveren. Hvordan skal jeg huske alle disse stedene og deretter gå inn for hånd og bytte til gitship?
- La oss fortsette denne diskusjonen i chat .