Bonjour,
En bref, mon pb est comment remplacer des charactères non utf8 avec sed ?
En moins bref :
J'ai un script pour nettoyer des noms de fichiers, mais je viens de constater que s'il y a un pb d'encodage dans le nom,
ça passe au travers.
Par exemple, sur un système en utf8, le sed suivant ne fait rien
echo tést|iconv -t ISO8859-1 -f utf8|sed -e 's/[^a-z0-9_\-\.]/_/g;'
alors que j'attendais naïvement t_st.
Un moyen de remplacer tout ce qui ne serait pas a-z0-9_ en utf8 par _ ?
--
Daniel
salut a tous,
Soit la saisie suivante:
echo 'this<cr>
test<cr>
'<cr>
J'obtiens a l'écran:
--------------------------
> echo 'this
quote> test
quote> '
this
test
--------------------------
maintenant, je rappelle l'historique et je tente d'inserer des lignes
entre this et test:
<esc>kO<cr>
J'obtiens a l'écran:
--------------------------
> echo 'this
test
'
this
test
--------------------------
ca n'est pas le comportement souhaité: j'aurais aimé que la frappe du
<cr>
- entraine la création d'une nouvelle ligne en mode insertion
- entraine la validation de la commande en mode normal
Je souhaiterais le même comportement pour vared.
Question bis relative a l'historique: <up> saute de ligne en ligne et
non de commande en commande. Ainsi,
echo pouet<cr>
echo 'pouet<cr>
pouet<cr>
pouet'<cr>
<up><up>
J'obtiens a l'écran:
--------------------------
> echo pouet <-- la ou je voudrais être
> echo 'pouet
pouet <-- la ou je suis
pouet'
--------------------------
existe t'il une touche pour naviguer de commandes en commandes ?
cordialement,
marc
Bonjour,
j'aimerais bien, réaliser une substitution de commande, suivie d'une
expansion de paramètre. L'idée, c'est de lancer la commande svnversion,
et de supprimer la dernière lettre si c'est un "M".
Avec zsh, j'y arrive avec:
VERSION=${$(svnversion )%%M}
Le problème, c'est que ça ne marche pas dans les autres shells que j'ai
essayé (bash et dash).
Or, j'aimerais bien une solution qui fonctionne sur un shell posix.
Évidemment, je pourrais le faire en deux coups
TMP=$(svnversion)
$ VERSION=${TMP%%M}
mais à tout hasard, je me demandais si ce n'était pas possible de faire
en un seul coup.
Est-ce que vous savez comment faire ?
merci d'avance
arno
Bonjour,
Je suis devant un comportement de joe dans un while que je ne comprend pas.
J'ai une liste de fichiers à éditer pour contrôle et modifs éventuelles, j'ai donc lancé un
while read f; do joe $f; done < fichiers.list
mais
- si fichiers.list commence par une ligne vide, ça m'ouvre joe avec un nouveau fichier qui contient le contenu de
fichiers.list (comme si joe recevait $f sur son entrée standard et pas comme argument),
- sinon, ça ouvre le premier fichier en y ajoutant à la fin la suite de fichiers.list (les noms des fichiers de la
liste, pas leur contenu)
alors que
while read f; do echo $f|xargs joe; done < fichiers.list
ou bien
for f in $(cat fichiers.list); do joe $f;done;
ont bien l'effet escompté (ouvre le premier fichier de la liste et passe au suivant à chaque fermeture de fichier).
J'ai aussi testé avec nano, mais seule la solution avec le for fonctionne, les autres donnent du "Received SIGHUP or
SIGTERM"
Une explication ?
--
Daniel
PS: pour ceux qui veulent tester
# le contenu de test
mkdir tmp
cd tmp
echo -e "tata\nbla\nblabla" >tata
echo -e "titi\nbli\nblibli" >titi
echo -e "toto\nblo\nbloblo" >toto
echo -e "tata\ntiti\ntoto">fichiers.list
echo >liste2
# et les tests
while read f; do joe $f; done < fichiers.list
while read f; do echo $f|xargs joe; done < fichiers.list
for f in $(cat fichiers.list); do joe $f;done;
while read f; do joe $f; done < liste2
while read f; do nano $f; done < fichiers.list
while read f; do echo $f|xargs nano; done < fichiers.list
for f in $(cat fichiers.list); do nano $f;done;