J'ai une chaîne comme celle-ci:
test.de. 1547 IN SOA ns1.test.de. dnsmaster.test.de. 2012090701 900 1000 6000 600
maintenant, je veux remplacer tous les onglets / espaces entre les enregistrements par un seul espace afin que je puisse facilement l'utiliser avec cut -d " "
J'ai essayé ce qui suit:
sed "s/[\t[:space:]]+/[:space:]/g"
et diverses variantes, mais n'a pas pu le faire fonctionner. Des idées?
cut
support-w
?Réponses:
Utilisation
sed -e "s/[[:space:]]\+/ /g"
Voici une explication:
Pour votre remplacement, vous souhaitez uniquement insérer un espace.
[:space:]
ne fonctionnera pas là car c'est une abréviation pour une classe de personnage et le moteur regex ne saurait pas quel personnage y mettre.Le
+
doit être échappé dans l'expression régulière, car avec le moteur d'expression régulière de sed+
est un caractère normal alors qu'il\+
s'agit d'un métacaractère pour «un ou plusieurs». À la page 86 de Mastering Regular Expressions , Jeffrey Friedl mentionne dans une note de bas de page que ed et grep ont utilisé des parenthèses échappées parce que "Ken Thompson pensait que les expressions régulières seraient utilisées pour travailler principalement avec le code C, où la nécessité de faire correspondre les parenthèses brutes serait plus courante que les références arrières . " Je suppose qu'il ressentait la même chose à propos du signe plus, d'où la nécessité de lui échapper pour l'utiliser comme métacaractère. Il est facile de se faire tromper par cela.En vous sed aurez besoin d'échapper
+
,?
,|
,(
et)
. ou utilisez -r pour utiliser l'expression régulière étendue (il ressemble alors àsed -r -e "s/[[:space:]]\+/ /g"
oused -re "s/[[:space:]]\+/ /g"
la source
\+
au lieu de juste+
?\+
Vous pouvez utiliser l'
-s
option ("squeeze") detr
:La
[:blank:]
classe de caractères comprend à la fois des espaces et des tabulations.la source
J'aime utiliser l'alias suivant pour bash. En s'appuyant sur ce que les autres ont écrit, utilisez sed pour rechercher et remplacer plusieurs espaces par un seul espace. Cela permet d'obtenir des résultats cohérents de coupe. À la fin, je l'ai parcouru une fois de plus dans sed pour changer l'espace en tab afin qu'il soit plus facile à lire.
la source