wake-up-neo.com

sed Befehl, um mehrere Leerzeichen in einzelne Leerzeichen zu ersetzen

Ich habe versucht, mehrere Leerzeichen in einer Datei mithilfe von sed in ein Leerzeichen zu ersetzen.

Aber es teilt jeden einzelnen Charakter wie unten. Bitte lassen Sie mich wissen, was das Problem ist ...

$ 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 
11
logan

Ihr sed-Befehl macht das Falsche, weil er auf "null oder mehr Leerzeichen" passt, was natürlich zwischen jedem Zeichenpaar geschieht! Anstelle von s/ */ /g möchten Sie s/ */ /g oder s/ +/ /g.

16
John Zwinck

Bei Verwendung von tr drückt die -s-Option aufeinanderfolgende Zeichen zu einem einzigen Zeichen:

tr -s '[:space:]' < test.txt
 iiHi Hello Hi
this is loga

Auch im Downcase: tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'

10
glenn jackman

Sie können awk verwenden, um das Problem zu lösen:

awk '{$0=tolower($0);$1=$1}1' test.txt
iihi hello hi
this is loga
3
Jotne
sed 's/ \+/ /g' test.txt | tr [A-Z] [a-z]

oder 

sed 's/\s\+/ /g' test.txt | tr [A-Z] [a-z]
1
Amos Baker

Vielleicht können Sie die folgende Regex für mehrere Leerzeichen zuordnen:

'\s+'

und mit nur einem Leerzeichen wie folgt ersetzen:

' '

0
sshashank124