Фильтровать выходные данные, чтобы получить все до первого тире и цифры

Также возможно изменить его только для текущего сеанса с помощью переменной окружения:

$ lsb_release -cs
linuxmint

$ export LSB_ETC_LSB_RELEASE=/etc/upstream-release/lsb-release

$ lsb_release -cs
xenial

источник

0
27.11.2020, 16:16
2 ответа

Вы можете использовать расширение параметра bash, чтобы удалить самую длинную строку после дефиса и цифры:

for file in *
do
  printf '%s turns into %s\n' "${file}" "${file%%-[[:digit:]]*}"
done
1
18.03.2021, 22:46

Чтобы получить все до первого тире, за которым следует цифра:

sed -E 's/-[[:digit:]].*$//' file

путем замены первого дефиса и цифры до конца строки пустой строкой.


В вашем примере я вижу -i18nв строке, которой посчастливилось выжить. Возможно, вы хотели бы иметь более строгие требования, например, соответствие первого тире + числа + точки + числа будет таким:

sed -E 's/-[[:digit:]]+\.[[:digit:]]+.*$//' file
0
18.03.2021, 22:46

Теги

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