J'ai essayé de remplacer plusieurs espaces d'un fichier par un seul espace à l'aide de sed.
Mais il divise chaque personnage comme ci-dessous . S'il vous plaît laissez-moi savoir quel est le problème ...
$ cat test.txt
iiHi Hello Hi
this is loga
$
$ cat test.txt | tr [A-Z] [a-z]|sed -e "s/ */ /g"
i i h i h e l l o h i
t h i s i s l o g a
Votre commande sed
fait le mauvais choix car elle correspond à "zéro ou plusieurs espaces", ce qui se produit bien sûr entre chaque paire de caractères! Au lieu de s/ */ /g
, vous voulez s/ */ /g
ou s/ +/ /g
.
En utilisant tr
, l'option -s
réduira les caractères consécutifs en un seul:
tr -s '[:space:]' < test.txt
iiHi Hello Hi
this is loga
Pour minimiser également: tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'
Vous pouvez utiliser awk
pour résoudre ceci:
awk '{$0=tolower($0);$1=$1}1' test.txt
iihi hello hi
this is loga
sed 's/ \+/ /g' test.txt | tr [A-Z] [a-z]
ou
sed 's/\s\+/ /g' test.txt | tr [A-Z] [a-z]
Peut-être que vous pouvez faire correspondre l'expression régulière suivante pour plusieurs espaces:
'\s+'
et remplacez par un seul espace comme suit:
' '