N' . vraiment correspondre à n'importe quel caractère?
Je suis en utilisant un simple script sed suppression de commentaires : sed -e 's/--.*$//'
Il fonctionne très bien jusqu'à ce que les caractères non-ascii sont présents dans un commentaire, par exemple: -- °
.
Cette ligne ne correspond pas à l'expression régulière et n'est pas remplacée.
Aucune idée de comment obtenir .
pour vraiment correspondre à n'importe quel caractère?
Solution :
Depuis file
dit que c'est une iso8859 texte, LANG
variable d'environnement doit être changé avant d'appeler sed
:
LANG=iso8859 sed -e 's/--.*//' -
OriginalL'auteur Julio Guerra | 2012-03-13
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi. C'est probablement un problème d'encodage des caractères.
Ce qui pourrait aider:
OriginalL'auteur Anonymoose
@julio-guerra: j'ai couru dans une situation similaire, en essayant de supprimer des lignes comme suit (la note la
Æ
caractère):--MP_/yZa.b._zhqt9OhfqzaÆC
dans un fichier, à l'aide de
sed 's/^--MP_.*$//g' my_file
L'encodage du fichier indiqué par l'Linux
file
commande a étéJ'ai essayé votre solution (malin!), avec diverses permutations; par exemple,
LANG=ISO-8859 sed 's/^--MP_.*$//g' my_file
mais aucun de ceux qui ont travaillé. J'ai trouvé deux solutions:
Perl
expression travaillé, c'est à dire supprimé cette ligne:perl -pe 's/^--MP_.*$//g' my_file
[Pour une explication de la
-pe
commutateurs de ligne de commande, reportez-vous à cette StackOverflow réponse:Perl drapeaux -pe, pi, -p, -w, -d, -i, -t? ]
Æ
caractère reste, mais il était maintenant UTF8 codé):iconv -f iso-8859-1 -t utf8 my_file > my_file.utf8
Que je travaille avec beaucoup (1000) d'e-mails avec les différents codages, qui subissent un traitement intermédiaire (bash-scénarisé les conversions à l'UTF-8 ne fonctionne pas toujours), pour ma "solution 1" ci-dessus sera probablement l'un des plus solides de la solution.
Notes:
OriginalL'auteur Victoria Stuart
La documentation de GNU sed
z
de commande mentionne à cet effet (mon emphase):Il semble probable que vous exécutez sed en UTF-8 (ou d'autres multi-octets) de paramètres régionaux. Vous devrez définir
LC_CTYPE
(grain plus fin queLANG
, et n'affectera pas la traduction des messages d'erreur. Valide les paramètres régionaux noms ressemblent à desen.iso88591
ou (pour l'emplacement dans votre profil)fr_FR.iso88591
, pas seulement le codage sur son propre, vous pourriez être en mesure de voir la liste complète aveclocale -a
.Exemple:
Alternativement, si vous savez que la non-commentaire des parties de la ligne contiennent uniquement des caractères ASCII, vous pourriez séparer la ligne à un marqueur de commentaire, d'impression de la première partie et jeter le reste:
OriginalL'auteur Toby Speight