Удаление нескольких пространств с помощью sed

Хороший ответ здесь: https://stackoverflow.com/questions/24405561/how-to-install-2-anacondas-python-2-7-and-3-4-on-mac-os-10-9

conda create -n python2 python=2.7 anaconda

, тогда для переключения:

source activate python2
0
задан 13 December 2017 в 15:31

6 ответов

sed 's/ \{2,\}/ /' # or sed -E 's/ {2,}/ /'

Эта команда заменяет первое появление двух или более ({2,}) пробелов одним пространством, это соответствует первому большому пробелу в вашем примере. Если вы хотите заменить каждое появление двух или более пробелов, добавьте g в конец команды:

sed 's/ \{2,\}/ /g' # or sed -E 's/ {2,}/ /g'

Если вы хотите заменить только последовательность, например. три или более пробела соответственно меняют цифру.

1
ответ дан 18 July 2018 в 01:18

С помощью tr вы можете сделать это намного проще:

tr -s ' '

из tr man:

-s, --squeeze-repeats replace each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
2
ответ дан 18 July 2018 в 01:18

внимательно прочитайте man sed и man 7 regex, и вы поймете:

sed -e 's/ \+/ /g'

изменит несколько соседних пространств на одно место на всей строке.

0
ответ дан 18 July 2018 в 01:18
sed 's/ \{2,\}/ /' # or sed -E 's/ {2,}/ /'

Эта команда заменяет первое появление двух или более ({2,}) пробелов одним пространством, это соответствует первому большому пробелу в вашем примере. Если вы хотите заменить каждое появление двух или более пробелов, добавьте g в конец команды:

sed 's/ \{2,\}/ /g' # or sed -E 's/ {2,}/ /g'

Если вы хотите заменить только последовательность, например. три или более пробела соответственно меняют цифру.

1
ответ дан 24 July 2018 в 17:22

С помощью tr вы можете сделать это намного проще:

tr -s ' '

из tr man:

-s, --squeeze-repeats replace each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character
2
ответ дан 24 July 2018 в 17:22
  • 1
    Хотя это решение проблемы, это не ответ на вопрос, поскольку OP явно запрашивает sed. – dessert 13 December 2017 в 16:06
  • 2
    Правда. Но мне кажется, что ОП просто хочет решить проблему и не знает других инструментов. – RoVo 13 December 2017 в 16:27

внимательно прочитайте man sed и man 7 regex, и вы поймете:

sed -e 's/ \+/ /g'

изменит несколько соседних пространств на одно место на всей строке.

0
ответ дан 24 July 2018 в 17:22
  • 1
    Я предлагаю удалить g. – Cyrus 13 December 2017 в 09:24
  • 2
    @Cyrus Без суффикса g, sed скроет только первое вхождение нескольких пробелов. – waltinator 13 December 2017 в 09:28
  • 3
    Я понял вопрос таким образом, что он только хочет уменьшить пробелы между "171211 22043707" и "21641". – Cyrus 13 December 2017 в 09:37
  • 4
    @Cyrus В комментарии он упомянул пробелы, которые он хочет устранить. – derHugo 13 December 2017 в 12:21
  • 5
    Вы можете пропустить -e. – dessert 13 December 2017 в 15:48

Другие вопросы по тегам:

Похожие вопросы: