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 \s
bę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
sed
musiałem korzystać, [[:space:]]
ponieważ \s
nie działało dla mnie. Być może \s
jest 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.
-E
flagę.
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"/'
sed
dowolnego 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.