Используйте sed
вместо grep
:
echo 12345 | sed -n '/^\([0-9]\{1,4\}\).*/s//\1/p'
Это соответствует 4 цифрам в начале строки, за которыми следует что-либо, сохраняются только цифры и печатаются их. -n
не позволяет печатать строки в противном случае. Если цифровая строка также может отображаться в средней строке, вам нужна более сложная команда.
На самом деле, в идеале вы должны использовать sed
с регулярными выражениями PCRE, поскольку вам действительно нужно не жадное совпадение. Однако, до разумного приближения, вы можете использовать: ( Полу-решение значительно более сложной проблемы ... теперь удалено! )
Поскольку вы хотите, чтобы первая строка длиной до 4 цифр в строке, просто используйте sed
, чтобы удалить все нецифровые символы, а затем напечатайте строку цифр:
echo abc12345 | sed -n '/^[^0-9]*\([0-9]\{1,4\}\).*/s//\1/p'
Соответствует строке из нецифровых чисел, за которыми следуют 1-4 цифры, за которыми следует что-либо, сохраняются только цифры и печатаются их.