Другой вариант:
cut -d' ' -f2 <<<'COUNT(*) 154'
Вы говорите cut
вернуть 2-ое пространство разделителем поля.
Обратите внимание, что одинарная кавычка входной строки обеспечивает ее буквальное использование без переменной интерполяции или расширения оболочки.
Update: Для того, чтобы решить исходную проблему:
СЕПГ Командование OP, в 's/COUNT(\*) //'
на самом деле работает:
sed 's/COUNT(\*) //' <<< 'COUNT(*) 154' # -> '154'
Обратите внимание, что sed
использует основные регулярных выражений по умолчанию, поэтому ()
НЕ должно быть сбежал - напротив, -E
ожидает extended regexes, для которых требуется экранирование ()
:
sed -E 's/COUNT\(\*\) //' <<< 'COUNT(*) 154' # -> '154'
Это оставляет нам интересно (как @shellter предполагает), действительно ли входная строка просто буквальный COUNT(*) 154
и не содержит других символов. таких как \n
, \r
, t
.
легкий способ изучить фактические символы заключается в использовании:
od -a <<< 'COUNT(*) 154'
Это будет символ за символом представление входной строки (строго говоря: байты в байтах), с управляющими символами символически символически; например: nl
для \n
, ht
для \t
, sp
для пространства.
, и вы уверены, что все это на одной линии? Обычно существует символ '\ n' (новая строка), отделяющий заголовок от значения. Удачи. – shellter
@ikegami С 'sed' они не экранируются по умолчанию - только при вызове с' -E' (базовое или расширенное регулярное выражение). – mklement0