Problème d’utilisation de Sed pour supprimer les espaces de début et de fin

J’utilise le code suivant pour supprimer les espaces en tête et en queue de toutes les lignes d’un fichier A.txt

sed 's/^[ \t]*//;s/[ \t]*$//' ./A.txt > ./B.txt 

Le problème se produit sur les lignes où il y a au début ou à la fin. Donc, disons par exemple, la ligne originale qui commence par la chaîne “timezone” devient “imezone”

Pouvez-vous s’il vous plaît me dire ce qui se passe ici? et aussi s’il existe une solution connue au problème.

Merci d’avance.

Certaines anciennes versions de sed ne comprennent pas les caractères d’échappement de style C tels que \ t et traitent cela comme deux caractères, “\” et “t”. Vous pouvez éviter le problème en utilisant un caractère de tabulation littérale – si vous le tapez directement dans le shell, tapez Ctrl+V Tab .

Une autre alternative, utilisant des classes de caractères d’espacement, si votre variété de sed ne supporte pas \s :

 sed 's/^[[:space:]]*//;s/[[:space:]]*$//' 

Vous pourriez avoir plus de chance si vous utilisez simplement la classe de caractères d’espacement:

 sed -e 's/^\s*//' -e 's/\s*$//' A.txt > B.txt 

versions plus récentes de sed comprennent \ t mais les anciennes versions peuvent ne pas avoir. Vous feriez mieux de remplacer \ t par un onglet littéral (CTRL-V vous donnera cela)

Quelle version de sed utilisez-vous sur quel système? (sed –version pour GNU sed)

restr bouche bée

 awk '{gsub(/^[[:space:]]+|[[:space:]]+$/,"")}1' file