Как сопоставить шаблон в конце строки / текста - PullRequest
7 голосов
/ 08 марта 2012

Я очень новичок в bash. Так что, если это довольно простой вопрос, прошу прощения.

Я пытаюсь заменить расширение файла '.gzip' на '.gz'.

например:.

testfile.xml.gzip => testfile.xml.gz

Кто-то написал скрипт, который делает это:

GZIP=`echo ${FILE} | grep .gz`

    .
    .
    .

FILE=`echo ${FILE} | sed 's/.gz//g'`

Первая строка неверно соответствует testfile.xml.gzip файлу. grep .gz соответствует тексту в имени файла, которое находится между ними, тогда как мне нужно, чтобы оно совпадало, только если оно находится в конце имени файла Может кто-нибудь помочь мне с тем, как исправить эту проблему? Короче говоря, мне нужно знать выражение, которое соответствует шаблону конца строки / текста.

Ответы [ 4 ]

13 голосов
/ 08 марта 2012

Используйте $, чтобы соответствовать концу строки:

FILE=`echo ${FILE} | sed 's/.gz$//g'`

В любом случае, эта команда удаляет завершающее расширение .gz из имени файла, а это не то, что выищу по вашему вопросу.Чтобы сделать это, ответ от dnsmkl - это путь с sed.

Обратите внимание, что, поскольку у вас уже есть FILE в переменной окружения, вы можете использовать bash манипулирование строками какследует:

$ FILE=textfile.xml.gzip
$ echo ${FILE/%gzip/zip}
textfile.xml.zip
7 голосов
/ 08 марта 2012

Конец строки соответствует "$" в sed

Например

echo 'gzip.gzip' | sed  's|gzip$|gz|g'

Выход

gzip.gz
0 голосов
/ 08 марта 2012

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

rename gzip gz *gzip
0 голосов
/ 08 марта 2012

должен делать каталог while из файлов .gzip

(ls * .gzip | во время чтения строки; do mv "$ line" "$ (basename" $ ​​line ".gzip) .gz"; сделано)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...