режущая часть струны - PullRequest
       15

режущая часть струны

2 голосов
/ 15 ноября 2011

Может кто-нибудь объяснить мне, как вырезать строку с использованием функций Linux, таких как sed. Например у меня жало

THIS-some-string-zzz-55.xml

как вырезать ".xml"?

результат должен быть таким:

THIS-some-string-zzz-55

Спасибо!

Ответы [ 4 ]

5 голосов
/ 15 ноября 2011

Несколько способов:

 basename thisfile.xml .xml

basename - это его собственный исполняемый файл, поэтому вы можете вызывать его из сценария оболочки или выполнять из C или языка сценариев.


Если ваша оболочка bash:

FILE=filename.xml
echo “filename: ${file%.*}”
echo “extension: ${file##*.}”


.. и, наконец, с sed

echo "filename.xml" | sed 's/\.xml$//'

То, что '$' в регулярном выражении в sed будет соответствовать только .xmlв конце строки.

1 голос
/ 15 ноября 2011

Grep время

$> echo THIS-some-string-zzz-55.xml | grep -o -P "(.*)(?=\.xml)"
THIS-some-string-zzz-55

Grep имеет магический флаг -P

   -P, --perl-regexp
          Interpret PATTERN as a Perl regular expression.   This  is  highly
          experimental and grep -P may warn of unimplemented features.

Кстати, вот полезная таблица , где вы можете найтиположительный взгляд (?=*), который я здесь использую.

0 голосов
/ 15 ноября 2011

Считается ли Bash функцией Linux?

Если так, это может работать для вас:

# string="THIS-some-string-zzz-55.xml"
# echo ${string%.xml}
THIS-some-string-zzz-55

или в этом случае:

# echo ${string%.*}
THIS-some-string-zzz-55

См. здесь для объяснения.1011 *

0 голосов
/ 15 ноября 2011

Это должно работать:

echo "THIS-some-string-zzz-55.xml" | sed 's/\.xml$//'
...