[sed] Comportement variable selon le script
Bonjour,
J'aimerai comprendre pourquoi je n' obtiens pas le même résultat
avec une commande SED selon qu'elle est passée directement dans un émulateur de terminal (xfce4-terminal)
ou via certain script ?
Voici un exemple concret :
Prenons un fichier : touch.txt contenant :
Code:
1 2 3 4 5 6 7 8 9 10 11
| TOUCH(1) Commandes TOUCH(1)
NOM
touch - Modifier l'horodatage d'un fichier
SYNOPSIS
touch [OPTION] ... FICHIER ...
DESCRIPTION
Mettre à jour les dates (dates et heures) d'accès et de dernière modi‐
fication de chaque FICHIER selon la date actuelle. |
Le but recherché est d'ajouter 2 simples quotes '' au début et à la fin de chaque ligne non-vide
(ceci pour formater ce contenu en "ligne de code" de Zim — https://www.zim-wiki.org )
Dans le terminal :
Code:
$ sed -Ei "s/^(.+)$/''\1''/g" /tmp/touch.txt
donne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
$ cat /tmp/touch.txt
''TOUCH(1) Commandes TOUCH(1)''
''NOM''
'' touch - Modifier l'horodatage d'un fichier''
''SYNOPSIS''
'' touch [OPTION] ... FICHIER ...''
''DESCRIPTION''
'' Mettre à jour les dates (dates et heures) d'accès et de dernière modi‐''
'' fication de chaque FICHIER selon la date actuelle.'' |
si je place le script : /tmp/script.sh
avec :
Code:
1 2 3 4
|
#!/bin/bash
sed -Ei "s/^(.+)$/''\1''/g" /tmp/touch.txt ;
exit |
cela fonctionne aussi.
Pourtant le script :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
#!/bin/bash
# Script: zim_manpage.sh
# Fonction: Formater la seclection du Manuel brut de copier/coller depuis SeeTxt
# Notes: S'utilise avec l'argument Zim : %t (texte séléctionné)
#
rm -Rf /tmp/zim/ ;
mkdir /tmp/zim/ ;
tempo='/tmp/zim/manpage.txt' ;
echo $@ > $tempo ;
sed -Ei "s/^(.+)$/''\1''/g" $tempo ;
cat $tempo ;
exit |
Note : Zim possède un mécanisme de remplacement de la sélection du contenu du fichier courant (%t)
par la sortie du script et ça fonctionne bien,
mais le résultat du scriopt est une unique ligne ;
c'est pareil quand je remplace $tempo par le chemin du fichier temporaire /tmp/zim/manpage.txt :
Code:
1 2
|
''TOUCH(1) Commandes TOUCH(1) NOM touch - Modifier l'horodatage d'un fichier SYNOPSIS touch [OPTION] ... FICHIER ... DESCRIPTION Mettre à jour les dates (dates et heures) d'accès et de dernière modi‐ fication de chaque FICHIER selon la date actuelle. '' |
même en échappant les simples cotes avec : \'
Pourquoi cette différence ?
Comment y remédier ?
Merci