Як я можу зіставити пробіли в 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
будь-якої системи? Якщо ні, то, можливо, варто згадати, де це працює аналогічно, як інші відповіді, просто ми знаємо обмеження і де це може не мати наміченого результату.