Frage Wie kann man alle nicht weißen Leerzeichen außer einem bestimmten anpassen?


In Perl \S passt auf alle Nicht-Leerzeichen.

Wie kann ich ein beliebiges Nicht-Whitespace-Zeichen außer einem umgekehrten Schrägstrich anpassen? \?


83
2018-05-25 13:20


Ursprung


Antworten:


Sie können ein Zeichenklasse:

/[^\s\\]/

passt auf alles, was kein Leerzeichen ist, noch auf a \. Hier ist ein anderes Beispiel:

[abc] bedeutet "Übereinstimmung a, b oder c"; [^abc] bedeutet "Übereinstimmung mit einem beliebigen Zeichen außer a, b oder c".


119
2018-05-25 13:23



Sie können ein Lookahead verwenden:

/(?=\S)[^\\]/

9
2018-05-25 13:22



Das hat bei mir funktioniert sed [Bearbeiten: Kommentar unten zeigt auf sed unterstützt nicht \ s]

[^ ]

während

[^\s] 

nicht

# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg

echo "ghai ghai" | sed "s/[^ g]//g"
g g

0
2018-02-10 20:15



Auf meinem System: CentOS 5

ich kann nutzen \s außerhalb von Sammlungen müssen aber verwendet werden [:space:] innerhalb von Sammlungen. In der Tat kann ich verwenden [:space:] nur innerhalb von Sammlungen. Also um einen einzelnen Platz zu verwenden muss ich diesen verwenden [[:space:]] Was wirklich seltsam ist.

echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"

Result: a b cX
  • erster Platz, mit dem ich zusammenpasse \s
  • zweiter Platz, den ich mit alternativ abgleichen kann [[:space:]]
  • das X, das ich mit "alles außer keinem Raum" kombiniere [^[:space:]]

Diese beiden werden nicht funktionieren:

a[:space:]b  instead use a\sb or a[[:space:]]b

a[^\s]b      instead use a[^[:space:]]b

0
2017-11-15 15:43