Найдите первое число, затем верните оставшуюся часть строки

Это потому, что, когда вы вводите команду в командной строке, оболочка запускает для нее «расширения». Последний шаг - «Удаление кавычек», но он удаляет только кавычки, которые не были результатом какого-либо расширения. (Подробнее см. EXPANSIONS в man bash .) Здесь кавычки являются частью раскрытия переменной, поэтому они не удаляются.

Вы можете ввести замену без кавычек, чтобы она работала:

cmd='sed -e s|abc|abc|g file'
$cmd
1
13.04.2017, 15:36
2 ответа

с grep , извлекается только совпадающая часть ( -o ):

grep -o '[0-9].*'
    { {1}}
  • [0-9] будет соответствовать первой цифре, а . * будет соответствовать остальным

Пример:

$ grep -o '[0-9].*' <<<'SomeText.MoreText.Whatever.1.2.3.4-branch.ext'
1.2.3.4-branch.ext
2
27.01.2020, 23:35

Самым простым и доступным в большинстве оболочек POSIX является:

$ var='SomeText.MoreText.Whatever.1.2.3.4-branch.ext'

$ echo "${var#"${var%%[0-9]*}"}"
1.2.3.4-branch.ext

Таким образом, нет необходимости вызывать какие-либо внешние утилиты (expr, sed, awk и т. Д.), А также избегаются затраты времени на вызов такой утилиты (для короткие строки, такие как в этом случае, для длинных строк (десятки k) оболочка очень медленная).

0
27.01.2020, 23:35

Теги

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