регулярное выражение для замены части даты - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть файл вроде A_B_C_D_E_F_20180904_0038849_SUPER03.txt

Я хочу извлечь только A_B_C_D_E_F.txt

Моя попытка

echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt |sed -e 's/'_[0-9]{8}_.*'/'*.txt'/g'

Ответы [ 4 ]

0 голосов
/ 28 сентября 2018

Если ваше имя файла присвоено переменной, а ваша оболочка bash, вы можете избежать использования sed и использовать прямое расширение параметра:

v="A_B_C_D_E_F_20180904_0038849_SUPER03.txt"
echo "${v%_*_*_*}.${v#*.}"
A_B_C_D_E_F.txt

bash, операторы % и # удалить соответственно соответствующий суффикс или шаблон префикса.

0 голосов
/ 28 сентября 2018

Вы можете попробовать это:

echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt \
  |sed -e 's/_[0-9]\{8\}_[0-9]\{7\}_[A-Z0-9]*//g'

где:
_[0-9]\{8\} - совпадение _20180904
_[0-9]\{7\} - совпадение _0038849
_[a-zA-Z0-9]* - совпадение _SUPER03

В результате вы получите: A_B_C_D_E_F.txt

0 голосов
/ 28 сентября 2018

Это может работать для вас (GNU sed):

sed 's/_[0-9][^.]*//' file

Удалить первое вхождение подчеркивания, за которым следует целое число до периода.

0 голосов
/ 28 сентября 2018

Необходимо изменить несколько вещей:

  • Запрещается запускать sed с опцией -e, которая предназначена для запуска сценариев sed
  • Вам не нужноодиночные кавычки внутри sed
  • Вы должны использовать \{ и \} для обозначения квантификаторов в синтаксисе регулярного выражения sed
  • Вам не нужен подстановочный знак * в тексте замены

С учетом вышеуказанных изменений это сработает для получения A_B_C_D_E_F.txt:

echo A_B_C_D_E_F_20180904_0038849_SUPER03.txt |sed 's/_[0-9]\{8\}_.*/.txt/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...