Удаляя все пробелы, вкладки, новые строки, и т.д. от переменной?

Если я вспоминаю правильно,

pacman -S package

устанавливает пакет

pacman -Rs package

удаляет пакет и все его зависимости---, но только те, которые не повредили бы другие пакеты и только тех, которых Вы явно не устанавливали.

Контроль pacman страница справочника.

Я, которого не знают unfortunatly, как проверить на поврежденные пакеты.

27
24.02.2012, 20:50
3 ответа

Можно использовать tr, как в tr -d '\040\011\012\015', который удалит пробелы, вкладки, возвраты каретки и новые строки.

38
27.01.2020, 19:39
  • 1
    , там преимущество использования \040\011\012\015 [:space:]? –  Nick 11.03.2015, 04:04
  • 2
    с очень старыми версиями UNIX является единственной причиной, о которой я могу думать---достаточно взрослый, что версия UNIX предшествует POSIX.1. –  Kyle Jones 11.03.2015, 21:15
  • 3
    , Что это с % символ в конце вывода? Угадайте, что это - некоторый Linux способ сказать мне, что вывод останавливается там? –  atripes 06.10.2017, 13:18

В ksh, ударе или zsh:

set_jobs_count=…
set_jobs_count=${set_jobs_count//[[:space:]]/}

В любой оболочке можно удалить ведущий и запаздывающий пробел и нормализовать весь промежуточный пробел к одиночному пробелу как это:

set +f
set -- $set_jobs_count
set_jobs_count=$*
set -f

set +f выключает globbing; если Вы знаете, что данные не содержат ни один из символов \[?*, можно опустить его.

4
27.01.2020, 19:39
  • 1
    интересный +1 –  munish 01.03.2012, 17:02
  • 2
    @BinaryZebra globbing происходит в set -- $set_jobs_count. set_jobs_count=$* эквивалентно set_jobs_count="$@" с тех пор $* и $@ только эквивалентны при закрытии кавычки и правая сторона присвоения анализируется тот же путь как дважды заключенная в кавычки строка. –  Gilles 'SO- stop being evil' 27.07.2015, 01:55

Как уже предлагалось, используйте "tr -d '[ :пробел :]'", НО, если это не сработает, возможно, в более старой системе Unix нужно покрыть все эти символы:

\011 HT    '\t' (horizontal tab)
\012 LF    '\n' (new line)
\013 VT    '\v' (vertical tab)
\014 FF    '\f' (form feed)
\015 CR    '\r' (carriage ret)
\040 SPACE ' '  (space)

с этим:

tr -d '\011\012\013\014\015\040'

Однако, возможно, есть другие невидимые -символы, искажающие вывод, Результатом «выберите количество (*)...» должно быть только целое число, чтобы оставить только цифры:

tr -dc '0-9'

Однако это не сработает, если после первых цифр есть другие символы, а затем еще цифры. Итак, чтобы вернуть только первую найденную последовательность цифр:

perl -ane '/\d+/ && print($&) && exit'

## example: will return '11', but raw output looks like '22 33'
(echo -e '\a11\b\b22 33') | perl -ane '/\d+/ && print($&) && exit'
3
28.12.2020, 09:40

Теги

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