Qu'entendez-vous par un texte? un fichier ou du texte dans un fichier? echo "foo.foo.foo" | sed 's/\./ /g'
Zanna
1
@KDG i) vous devez créer un compte distinct pour chaque site SE, mais si vous utilisez les mêmes informations d'identification, les comptes seront liés. ii) Bien que ce site soit en effet limité à Ubuntu exclusivement, je ne vois rien ici qui serait une preuve irréfutable que vous n'utilisez pas Ubuntu, donc je ne vois aucune raison de le fermer.
terdon
Réponses:
20
Vous pouvez créer une fonction et ajouter à la fin de votre ~/.bashrc, par exemple:
nodot() { echo "$1" | sed 's/\./ /g' ; }
exemple d'utilisation:
$ nodot foo.foo.foo
foo foo foo
Vous pouvez également utiliser cette fonction dans zsh, ajoutez-la simplement à votre ~/.zshrcplace.
trest en fait destiné exactement à cet effet. sedest exagéré.
Max Ried
1
+1 précisément pour tr, qui est un outil très utile que beaucoup de gens ne semblent pas connaître pour une raison quelconque. Bien plus simple que sedpour convertir des classes entières de caractères.
moelleux
5
Ne l'écrivez jamais en «C» si vous pouvez le faire en «awk»; Ne le faites jamais en «awk» si «sed» peut le gérer; N'utilisez jamais «sed» lorsque «tr» peut faire le travail; N'invoquez jamais «tr» lorsque «chat» est suffisant; Évitez autant que possible d'utiliser «chat». - Lois de programmation de Taylor
Ross Presser
1
Bonne réponse. Cette réponse doit être acceptée.
SuB
24
Utilisation de bash pur:
bash-3.2$ a='a.a.a'
bash-3.2$ echo "${a/./ }"
a a.a
bash-3.2$ echo "${a//./ }"
a a a
split_dot()
{
string="$1"
if set | grep -q "IFS";
then
ifs_unset="false"
old_ifs=$IFS
else
ifs_unset="true"
fi
IFS="."
echo $string
if [ "$ifs_unset" == "true" ];
then
unset IFS
else
IFS=$old_ifs
fi
}
La réinitialisation IFSest plus délicate que de simplement l'enregistrer dans une variable et de restaurer la valeur. Un non défini IFSet un vide IFSont un comportement différent, vous devez donc vérifier s'il est non défini ou simplement vide, au cas où il était vide auparavant.
muru
5
Les fonctions ne s'exécutent pas en sous-coquilles. Seules certaines variables ont une portée différente (les paramètres de position et quelques autres sont répertoriés dans gnu.org/software/bash/manual/html_node/Shell-Functions.html ). C'est pourquoi nous avons le localmot - clé.
muru
3
Donc, si OP avait déjà été désactivé IFSpour une raison quelconque, cette fonction le mettrait à vide, ce qui a un comportement différent.
muru
2
@fedorqui malheureusement, même cela ne fonctionnera pas; car la valeur IFS est définie trop tard pour que l'instruction en cours soit analysée. Il faudrait en fait utiliser un sous-shell (IFS=.; echo ...). Puisque cette réponse utilisait une fonction, Serg pourrait simplement changer les accolades en parenthèses et ne pas s'inquiéter de réinitialiser IFS du tout
muru
2
@fedorqui vous pourriez trouver ma question similaire sur U&L intéressante: unix.stackexchange.com/q/264635/70524 (Gilles donne toujours de très bonnes réponses)
echo "foo.foo.foo" | sed 's/\./ /g'
Réponses:
Vous pouvez créer une fonction et ajouter à la fin de votre
~/.bashrc
, par exemple:exemple d'utilisation:
Vous pouvez également utiliser cette fonction dans zsh, ajoutez-la simplement à votre
~/.zshrc
place.la source
Vous pouvez utiliser la commande tr pour convertir le caractère.
la source
tr
est en fait destiné exactement à cet effet.sed
est exagéré.tr
, qui est un outil très utile que beaucoup de gens ne semblent pas connaître pour une raison quelconque. Bien plus simple quesed
pour convertir des classes entières de caractères.Utilisation de bash pur:
la source
Utilisation de
Internal Field Separator (IFS)
variable:Cela peut être joliment mis dans une fonction:
Et exécutez comme suit:
la source
IFS
est plus délicate que de simplement l'enregistrer dans une variable et de restaurer la valeur. Un non définiIFS
et un videIFS
ont un comportement différent, vous devez donc vérifier s'il est non défini ou simplement vide, au cas où il était vide auparavant.local
mot - clé.IFS
pour une raison quelconque, cette fonction le mettrait à vide, ce qui a un comportement différent.(IFS=.; echo ...)
. Puisque cette réponse utilisait une fonction, Serg pourrait simplement changer les accolades en parenthèses et ne pas s'inquiéter de réinitialiser IFS du toutQuelqu'un a manqué
awk
/perl
/python
/go
:la source
On peut
xargs
aussi utiliser . Voici un one-liner utilisantxargs
la source