Comment puis-je assortir les espaces dans sed? Dans mes données, je souhaite faire correspondre tous les 3 + espaces blancs suivants (espace de tabulation) et les remplacer par 2 espaces. Comment cela peut-il être fait?
Comment puis-je assortir les espaces dans sed? Dans mes données, je souhaite faire correspondre tous les 3 + espaces blancs suivants (espace de tabulation) et les remplacer par 2 espaces. Comment cela peut-il être fait?
Réponses:
La classe de caractères \s
correspondra aux caractères d'espacement <tab>
et <space>
.
Par exemple:
$ sed -e "s/\s\{3,\}/ /g" inputFile
remplacera chaque séquence d’au moins 3 espaces blancs par deux espaces.
REMARQUE : Pour la conformité POSIX, utilisez la classe de caractères à la [[:space:]]
place de \s
, car cette dernière est une extension GNU sed. Voir les spécifications POSIX pour sed et BRE
sed
je devais utiliser [[:space:]]
car \s
cela ne fonctionnait pas pour moi. Peut \s
- être est une extension GNU sed ?
[[:space:]
un, vous pouvez utiliser [[:blank:]]
ce qui ne correspond qu'aux onglets et espaces horizontaux (mais pas aux nouvelles lignes, aux onglets verticaux, etc.).
Cela fonctionne sur MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
faire correspondre un ou plusieurs espaces.
-E
drapeau.
Certaines versions plus anciennes de sed peuvent ne pas reconnaître \ s comme un jeton de correspondance d’espace. Dans ce cas, vous pouvez faire correspondre une séquence d'un ou plusieurs espaces et onglets avec '[XZ] [XZ] *' où X est un espace et Z est un onglet.
sed 's/[ \t]*/"space or tab"/'
sed
n'importe quel système? Si ce n'est pas le cas, il pourrait être intéressant de préciser où cela fonctionne de la même manière que les autres réponses, afin que nous connaissions les limites et où cela pourrait ne pas avoir le résultat escompté.