Discussion:
Recursieve zoek en vervang met output
(te oud om op te antwoorden)
Paul van der Vlis
2023-02-04 21:07:30 UTC
Permalink
Hoi,

Ik doe dit om recursief te zoeken en vervangen:
grep -Rl "$zoek" * | xargs sed -i "s|$zoek|$vervang|g"

Nu ben ik op zoek naar een manier waarop de bestanden die gewijzigd
worden ook op het scherm worden weergegeven. Iemand een idee?

Groet,
Paul
--
Paul van der Vlis Linux systeembeheer Groningen
https://vandervlis.nl
Izak van Langevelde
2023-02-05 13:27:22 UTC
Permalink
Post by Paul van der Vlis
sed -i "s|$zoek|$vervang|g"
Het is me niet helemaal duidelijk wat de bedoeling van $ in je
zoekpatroon is, maar ik zou zoiets proberen, in bash:

for i in `grep -Rl "$zoek" *` ; do sed -i "s|zoek|vervang|g" $i; done
--
Grinnikend door het leven...
De ongekruisigde
2023-02-05 13:29:49 UTC
Permalink
Post by Izak van Langevelde
Post by Paul van der Vlis
sed -i "s|$zoek|$vervang|g"
Het is me niet helemaal duidelijk wat de bedoeling van $ in je
Dat moet waarschijnlijk de s van substitute zijn.
Post by Izak van Langevelde
for i in `grep -Rl "$zoek" *` ; do sed -i "s|zoek|vervang|g" $i; done
De ongekruisigde
2023-02-05 13:32:02 UTC
Permalink
Post by Izak van Langevelde
Post by Paul van der Vlis
sed -i "s|$zoek|$vervang|g"
Het is me niet helemaal duidelijk wat de bedoeling van $ in je
variabelen in een omvattend script?
Post by Izak van Langevelde
for i in `grep -Rl "$zoek" *` ; do sed -i "s|zoek|vervang|g" $i; done
Oscar
2023-02-06 08:50:27 UTC
Permalink
Post by Paul van der Vlis
Hoi,
grep -Rl "$zoek" * | xargs sed -i "s|$zoek|$vervang|g"
Heb je een belangrijke reden om -R te gebruiken in plaats van -r?
Het verschil is dat -R symlinks volgt en dat kan gevaarlijk zijn.

Wil je ook zoeken in hidden bestanden in de huidige directory, of alleen
hidden bestanden in subdirectories? Met * mis je alles wat in de huidige
directory met een . begint. Wil je die ook zien, laat die * dan gewoon weg,
dan zoekt grep ook de hele huidige directory recursief door.

En als je het helemaal perfect wil maken, geef grep dan -Z mee, zodat
filenamen met een NUL character worden afgesloten net zoals find dat
doet met -print0.. Doe hetzelfde met xargs door -0 mee te geven en je
hebt geen last meer van filenamen met rare leestekens of spaties.
Post by Paul van der Vlis
Nu ben ik op zoek naar een manier waarop de bestanden die gewijzigd
worden ook op het scherm worden weergegeven. Iemand een idee?
Heb je wat aan de -t optie van xargs?

| -t, --verbose
| Print the command line on the standard error output
| before executing it.

Met alle tips van hierboven, wordt het dan:

grep -Zrl "$zoek" | xargs -0 -t sed -i "s|$zoek|$vervang|g"
--
[J|O|R] <- .signature.gz
Loading...