Dette spørgsmål har allerede svar her :
Kommentarer
- Du vil have sed, ikke grep. Du ' bruger også " smart " citater, så grep søger efter bogstavelig streng
“string”
, inklusive citaterne. Du vil have"string"
(eller sandsynligvis endnu bedre,'string'
, medmindre du planlægger at bruge parameterudvidelse i søgeudtrykket). -
grep
isn ' t bruges til at erstatte strenge. Det ' bruges til at finde strenge. For at erstatte dem skal du havesed
ellerawk
. - Så ville det være noget i retning af
- sed –recursive –ignore-case " streng ", " erstatning -streng "
- Relateret: søg og erstat ved hjælp af grep (ikke sed) – dog du kunne bruge
grep --recursive --files-with-matches
til at konstruere en liste med filnavne, der skal sendes tilsed
Svar
Prøv denne kommando
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 streng, og hvad hvis jeg vil at gøre det fra rodmappen på serveren?
- For eksempel hvis jeg erstatter " wavbyte " med " gitship " fra rodmappen på Ubuntu-serveren ville det være:
- find / -type f -exec sed -i ' s / wavbyte / gitship / g ' {} \;
- Højre, men wavbyte findes mange forskellige steder på serveren. Hvordan skal jeg huske alle disse steder og derefter gå ind i hånden og skifte til gitship?
- Lad os fortsætte denne diskussion i chat .