Ваш пример работает на меня при исключении фигурных скобок
$ tar --extract --file=test.tar.gz extract11
Если Ваш файл extract11 находится в подпапке, необходимо указать путь в tarball.
$ tar --extract --file=test.tar.gz subfolder/extract11
Добавьте -o
переключатель так, чтобы grep
только возвраты, что соответствует шаблону, для которого Вы держите:
$ grep -Po "(?<=\[')[^,]*" data.txt
OVS/sdasd/asdasd/asdasd/something.img
@slm уже дал Вам канонический ответ. Вот еще несколько опций:
Использовать awk
и '
как разделитель полей (принимающий все строки имеют тот же формат):
$ awk -F "'" '($1~/ = /){print $2}'
OVS/sdasd/asdasd/asdasd/something.img, w
Сделайте все это в жемчуге:
$ perl -lne 'print $1 if /\[.(.*?).\]/' data.txt
OVS/sdasd/asdasd/asdasd/something.img, w
Используйте более простой regex и проанализируйте результаты:
$ grep "\[.*\]" data.txt | awk -F "'" '{print $2}'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep -o "\[.*\]" data.txt | perl -pe "s/[\[\]']//g"
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | sed 's/.*\[.\(.*\).\]/\1/'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | perl -pne 's/.*\[.(.*?).\].*/$1/'
OVS/sdasd/asdasd/asdasd/something.img, w
$ grep "\[.*\]" data.txt | perl -lne 'print $1 if /\[.(.*?).\]/'
OVS/sdasd/asdasd/asdasd/something.img, w
Можно также использовать sed
без lookaround утверждения для большей мобильности (-o
может не быть доступно для Вашего grep
):
sed "s!['\(\[^,\]*\),.*\$!\1!;t;d;p" data.txt
Отметьте "странное" использование Escape обратной косой черты здесь. Это вследствие того, что sed
BREs использования по умолчанию (см. этот вопрос).
Разговор о мобильности, почему не только используют Perl?
perl -nle "print \$1 if /\['([^,]*)/" data.txt