Як я можу зіставити пробіли в sed? У своїх даних я хочу зіставити всі 3+ наступних символів пробілу (пробіл) і замінити їх на 2 пробіли. Як це можна зробити?
Як я можу зіставити пробіли в sed? У своїх даних я хочу зіставити всі 3+ наступних символів пробілу (пробіл) і замінити їх на 2 пробіли. Як це можна зробити?
Відповіді:
Клас символів \sбуде відповідати символам пробілів <tab>та <space>.
Наприклад:
$ sed -e "s/\s\{3,\}/ /g" inputFile
замінить кожну послідовність щонайменше 3 пробілів на два пробіли.
ЗАБЕЗПЕЧЕННЯ : Для відповідності POSIX використовуйте клас символів [[:space:]]замість \s, оскільки останній є розширенням sed GNU. Див. Специфікації POSIX для sed і BRE
sedя повинен був використовувати, [[:space:]]тому що \sвін не працював для мене. Можливо \s, розширення sed GNU ?
[[:space:]одного можна використовувати те, [[:blank:]]що відповідає лише горизонтальним вкладкам і пробілам (але немає нових рядків, вертикальних вкладок тощо).
Це працює на MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"відповідати одному або більше пробілів.
-Eпрапор.
Деякі старіші версії sed можуть не розпізнавати \ s як маркер білого простору, що відповідає. У цьому випадку ви можете зіставити послідовність одного або декількох пробілів і вкладок з '[XZ] [XZ] *', де X - пробіл, а Z - вкладка.
sed 's/[ \t]*/"space or tab"/'
sedбудь-якої системи? Якщо ні, то, можливо, варто згадати, де це працює аналогічно, як інші відповіді, просто ми знаємо обмеження і де це може не мати наміченого результату.