Вы должны извлечь LibreOffice_5.1.2.2_Linux_x86-64_deb.tar.gz
и установить любой пакет deb в Это.
например tar xvf LibreOffice_5.1.2.2_Linux_x86-64_deb.tar.gz && dpkg -i $ (find. -Name '* .deb')
Если ваш grep
не поддерживает -o
, вы можете использовать вместо него perl
:
perl -lne "print for /'.*?\.swf'/g" < in.txt > out.txt
С sed
:
sed -n "/\('[^']*\.swf'\)/{s//\n\1\n/;s/.*\n\(.*\n\)/\1/;P;D;}"
Это эквивалент:
awk '
{
while(match($0, '"/'[^']*\.swf'/"')) {
print substr($0, RSTART, RLENGTH)
$0 = substr($0, RSTART+RLENGTH)
}
}'
( D
в sed
зацикливается с удаленной первой строкой пространства шаблонов).
Вот подход awk
:
$ awk "{for(i=1;i<=NF;i++){if(\$i~/'[^']*.swf'/){print \$i}}}" file
'lol.swf'
'33.swf'
И не-GNU grep. Просто замените все пробелы на новые строки и используйте обычный grep
:
$ sed 's/ /\n/g' file | grep "'[^']*.swf'"
'lol.swf'
'33.swf'
Я бы просто использовал grep (здесь предполагается GNU grep
):
grep -o "'[^']*\.swf'" input.txt > output.txt
-o
печатает только совпадающую часть, а не всю строку. "'[^']*\.swf'"
- это шаблон для поиска, заключенный в "
, так что в нем могут быть "
. Он соответствует начальному '
, затем [^']*
, то есть неопределенному количеству не'
символов, затем .swf
(N.B. вы должны экранировать .
как \.
, так как .
имеет особое значение в регулярных выражениях. input.txt
- входной файл для чтения. > output.txt
перенаправит вывод в этот файл. Если вы удалите эту часть, вы сможете предварительно просмотреть вывод на экране. Если GNU grep
не установлен, можно попробовать следующее (вдохновленное идеей замены от terdon).
tr -d '\n' <input.txt | tr "'" '\n' | head -n -1 | tail -n +2 | grep '.*\.swf$' > output.txt
tr -d '\n' прочитает из input.txt
, затем удалит все переносы строк (\n
).
tr "'" '\n'
преобразует все '
в переносы строк. Это означает, что каждая строка ранее была окружена '
. head -n -1 | tail -n +2
. Однако, если исходный текстовый файл начинался с something.swf'
или заканчивался 'something.swf
, они были бы на своей собственной строке, несмотря на наличие только одного '
, и были бы ошибочно обнаружены следующим grep
. Если бы, однако, первая или последняя строка правильно содержала обе кавычки, на этом этапе был бы дополнительный перевод строки в начале или в конце. Следовательно, этот сегмент кода отделяет последнюю и первую строку, чтобы соответствовать только этому сценарию. grep '\.swf$'
будет искать строки, которые заканчиваются на .swf
.