OVH Cloud OVH Cloud

script avec sed

4 réponses
Avatar
philafil
Bonjour,

J'essaye de passer une commande sed sur tous les fichier d'un
repertoire et marche pas, pourquoi ?

#!/bin/bash
function f_sed {
sed -e "1,25d" > "$1"
# ou -> sed -e "1,25d" "$1" > "$1"
}
{
find -type f -name "*.html"
echo "EOF"
} | {
while true; do
read -r i
test "$i" =3D "EOF" && break
f_sed "$i"
done
}

Mer=E7i pour toutes aide=20

Philippe

4 réponses

Avatar
Pascal Bourguignon
writes:
J'essaye de passer une commande sed sur tous les fichier d'un
repertoire et marche pas, pourquoi ?

#!/bin/bash
function f_sed {
sed -e "1,25d" > "$1"
# ou -> sed -e "1,25d" "$1" > "$1"
}
{
find -type f -name "*.html"
echo "EOF"
} | {
while true; do
read -r i
test "$i" = "EOF" && break
f_sed "$i"
done
}

Merçi pour toutes aide


DIRECTORY="." # par exemple
find $DIRECTORY -type f -name *.html -print | while read -r file ; do
cp ${file} ${file}~ && sed -e '1,25d' < ${file}~ > ${file}
done


find prend un répertoire!
commence par tronquer le fichier, alors { cmd <f >f } ne va rien lire.




--
__Pascal Bourguignon__ http://www.informatimago.com/

Nobody can fix the economy. Nobody can be trusted with their finger
on the button. Nobody's perfect. VOTE FOR NOBODY.

Avatar
Stephane Chazelas
On 6 Jul 2005 01:34:02 -0700, wrote:
J'essaye de passer une commande sed sur tous les fichier d'un
repertoire et marche pas, pourquoi ?



Parce que tu dis au shell de creer un fichier "$1" vide et
ensuite tu dis a sed d'ecrire dedans. sed voit donc un fichier
vide au moment ou il se lance.

#!/bin/bash
function f_sed {
sed -e "1,25d" > "$1"
# ou -> sed -e "1,25d" "$1" > "$1"
}
{
find -type f -name "*.html"
echo "EOF"
} | {
while true; do
read -r i
test "$i" = "EOF" && break
f_sed "$i"
done
}
[...]


J'ecrierais ca:

perl -ni -e 'print if $. > 25' ./**/*.html(.D)

Mais faut dire que j'utilise zsh.

--
Stephane

Avatar
Laurent Wacrenier
Stephane Chazelas écrit:
perl -ni -e 'print if $. > 25' ./**/*.html(.D)


Ça marche ? À priori, $. n'est remis à 0 qu'après un close() explicite.
(ajouter "close if eof")

Avatar
philafil
Bonjour,

writes:
J'essaye de passer une commande sed sur tous les fichier d'un
repertoire et marche pas, pourquoi ?

#!/bin/bash
function f_sed {
sed -e "1,25d" > "$1"
# ou -> sed -e "1,25d" "$1" > "$1"
}
{
find -type f -name "*.html"
echo "EOF"
} | {
while true; do
read -r i
test "$i" = "EOF" && break
f_sed "$i"
done
}

Merçi pour toutes aide


DIRECTORY="." # par exemple
find $DIRECTORY -type f -name *.html -print | while read -r file ; do
cp ${file} ${file}~ && sed -e '1,25d' < ${file}~ > ${file}
done


find prend un répertoire!
commence par tronquer le fichier, alors { cmd <f >f } ne va rien lire.





Merçi marche nickel !

Philippe