6
votes

sed remplacer l'onglet littéral

Je veux remplacer onglet code> S dans stdout code> avec des points-virgules, en exécutant sed code> de la coque ZSH.

Je comprends une boîte Normalement (dans d'autres coquilles?) Utilisez: P>

somecommand | sed 's/[TAB]/;/g'


0 commentaires

3 Réponses :


8
votes

L'utilisation de ZSH n'a rien à voir avec cela. Le \ t est une extension GNU aux expressions régulières utilisées dans SED. Sur une BSD SED, vous n'avez pas les extensions, alors devez utiliser l'onglet littéral.


2 commentaires

@poplitea Si votre script ne fonctionnera que dans ksh93, bash ou zsh (par opposition à d'autres variantes SH telles que PDKSH, Bourne ou Ash), vous pouvez utiliser $ 's / \ t /; /' g où la coque fait l'expansion des barres obliques backslash et sed voit un caractère d'onglet littéral.


@Gilles: fantastique! Je savais de $ (), mais pas de substitution de $ ''. Merci beaucoup, cela facilite la résolution de mon problème. Vous auriez probablement dû mettre cela dans une réponse plutôt qu'un commentaire, cependant (?).



3
votes

Une option est de préparer votre script SED à l'avance avec Printf. XXX

mais Michael ++ ... Il peut y avoir d'autres variantes SED qui soutiennent également des échappements de style Printf, mais c'est certainement pas "standard".


0 commentaires

0
votes

Si vous connaissez la sortie de la commande est un texte normal (uniquement des onglets et du texte imprimable), vous pouvez utiliser: xxx

-E active "étendu "Les expressions régulières, qui peuvent contenir des noms de classe de caractères.


0 commentaires