Команда для печати содержимого перед символом (последний символ в строке)

Команда для печати содержимого перед символом (последний символ в строке)

Предположим, у меня есть 3 файла:

abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip

Я хочу напечатать только символы перед последним подчеркиванием(_)

Ожидаемый результат:

abc_def
abc
abc_def_ghi

решение1

Вы можете использовать bash с расширением параметров:

$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi

решение2

С помощью sed вы можете попробовать

sed -E 's/(.*)_.*/\1/'

например, скопируйте и вставьте это в командную строку

% cat << EOF | sed -E 's/(.*)_.*/\1/'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF

выход

abc_def
abc
abc_def_ghi

обратите внимание, эта команда оставляет sedавтоматическую печать пространства шаблона на месте, что означает, что любые другие строки, которые не соответствуют шаблону (т.е. не содержат никаких _'), будут частью вывода. Если они вам не нужны, вы можете использовать

sed -n -E 's/(.*)_.*/\1/p'

Связанный контент