Как извлечь все строки в require ('')?

418
FaiChou

Мои исходные файлы примерно такие:

abl require('../img/a.png') require('../img/b.png') bla require('../../img/c.png') ble <Image source= 

Мой ожидаемый результат:

'../img/a.png' '../img/b.png' '../../img/c.png' '../img/d.png' 

В скрипте Bash мне нужно извлечь все необходимое '../../img/bla.png'для каждой строки файла. Может быть одна строка для нескольких предметов.

Я пытался использовать это:

cat file | cut -d'(' -f2 | cut -d')' -f1 

Но я это могу вырезать только для одной строки на одну строку.

1

1 ответ на вопрос

1
Kamil Maciorowski
grep -Po '(?<=require\().*?(?=\))' 

Он использует взгляд назад и взгляд в будущее. Это потерпит неудачу, если какой-либо путь включает ). Если каждый путь находится в одинарных кавычках, эта версия должна работать даже с )путями:

grep -Po "(?<=require\()'.*?'(?=\))" 

Это было проверено на Linux, GNU grep. Пользователи Mac, посмотрите этот вопрос .

Отличное решение с помощью grep и PCRE! Я пытался фильтровать с помощью sed, потом понял, что будет проще разделить поля с помощью awk `awk -F '[()]' ';} '` Paulo 5 лет назад 0
Прекрасная работа. [Grep -P не работает хорошо] (https://stackoverflow.com/questions/16658333/grep-p-no-longer-works-how-can-i-rewrite-my-searches), поэтому я использую `perl - nle 'print $ & if m ' file` сделал эту работу FaiChou 5 лет назад 0
@FaiChou Спасибо за ваш отзыв. Я включил ссылку в моем ответе. Kamil Maciorowski 5 лет назад 0

Похожие вопросы