[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [NOVICE] Søg og erstat



Rasmus Hammerum skrev:

> Jeg ønsker at søge i en mappe med filer og undermapper, hvor jeg så
> vil erstatte et ord med et nyt ord. Dette gælder både for mapper,
> filnavne samt tekst i filer. Ændringen skal være case-sensitive. Jeg
> er ny med linux og kan ikke rigtig få hul på den...

Normalt vil man nok dele opgaven op i to dele:

 a) Omdøbe filer og kataloger.
 b) Ændre i filer.

Hvis vi går ud fra at vi starter i kataloget »rodkatalog« og vil
erstatte »et« med »andet«, så kan vi løse delopgaverne sådan her:

 a) Med kommandoen:

    find rodkatalog -depth | while read navn; do
       katalog="$(dirname "${navn}")"
       fil="$(basename "${navn}")"

       rettet_filnavn="${fil//et/andet}"

       if [ "${rettet_filnavn}" != "${fil}" ]; then
          echo mv -i "${katalog}/${fil}" \
                     "${katalog}/${rettet_filnavn}"
       fi
    done | more

    (Denne udgave _viser_ dig blot hvad der vil ske.  Du skal erstatte
    »echo mv« med »echo no | mv« for at få omdøbt katalogerne.)

    Hvis kataloget hedder noget andet end »rodkatalog«, skal du ændre
    i den første linje.

    Hvis du vil omdøbe andet end fra »et« til »andet«, skal du ændre i
    den fjerde linje.

 b) Med kommandoen:

    find rodkatalog -type f | while read fil; do                                                          ~
       if grep -l 'en' "${fil}" 1>/dev/null; then
          sed -i 's/en/anden/g' "${fil}" \
            && echo "Erstattede »en« med »anden« i »${fil}«."
       fi
    done | more

    Jeg har her valgt at lade kommandoen rapportere hvilke filer der
    er blevet rettet i.

    Hvis du først vil prøve med en kopi af dine data, så kan du med
    kommandoen »cp -pr rodkatalog kopi-af-rodkatalog« oprette en kopi
    af hele det katalog (med underkataloger) du vil arbejde på.

Jeg vil foreslå at du læser brugsanvisningerne til de programmer jeg
bruger i kommandoerne ovenfor _før_ du satser dine data på dem.  Hvis
du for eksempel skal bruge brugsanvisningen til »find«, så taster du
blot »man find« på kommandolinjen.  (»man« er kort for »manual«)

   man find
   man dirname
   man basename
   man mv
   man more
   man grep
   man sed

God fornøjelse,

Jacob
-- 
Computere er ikke intelligente.  Det er bare noget de tror.


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2008-03-01, 02:01 CET [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *