Jak mogę dopasować białe znaki w sed? W moich danych chcę dopasować wszystkie 3+ kolejne białe znaki (tabulator) i zastąpić je 2 spacjami. Jak można to zrobić?
Jak mogę dopasować białe znaki w sed? W moich danych chcę dopasować wszystkie 3+ kolejne białe znaki (tabulator) i zastąpić je 2 spacjami. Jak można to zrobić?
Odpowiedzi:
Klasa znaków \sbędzie pasować do białych znaków <tab>i <space>.
Na przykład:
$ sed -e "s/\s\{3,\}/ /g" inputFile
zastąpi każdą sekwencję co najmniej 3 białych znaków dwiema spacjami.
UWAGA : Aby zachować zgodność z POSIX, użyj klasy znaków [[:space:]]zamiast \s, ponieważ ta ostatnia jest rozszerzeniem GNU sed. Zobacz specyfikacje POSIX dla sed i BRE
sedmusiałem korzystać, [[:space:]]ponieważ \snie działało dla mnie. Być może \sjest GNU sed rozszerzenie?
[[:space:]jednego można użyć, [[:blank:]]który pasuje tylko do poziomych tabulatorów i spacji (ale bez znaków nowej linii, tabulatorów pionowych itp.).
Działa to w systemie MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"dopasować jedną lub więcej spacji.
-Eflagę.
Niektóre starsze wersje sed mogą nie rozpoznawać tokenów jako białych znaków. W takim przypadku możesz dopasować ciąg jednej lub więcej spacji i tabulatorów do „[XZ] [XZ] *”, gdzie X to spacja, a Z to tab.
sed 's/[ \t]*/"space or tab"/'
seddowolnego systemu? Jeśli nie, warto wspomnieć, gdzie działa to w podobny sposób, jak inne odpowiedzi, tak więc znamy ograniczenia i gdzie może to nie przynieść zamierzonego rezultatu.