2015-07-08 2 views
1

У меня в файле строки, такие как img src="../image/popup.jpg", или bg: 'images/xxx/popup.png'. Я хотел бы заменить весь Filepath/имя с другой строкой с СЭД, я попыталсяsed заменить имя файла начинается с цитаты

sed 's/^"[^\s]*/somethingelse/g' 
+0

Я знаю только о имени файла , но путь должен соответствовать регулярному выражению –

+0

Можете ли вы просто заменить двойные кавычки одинарными кавычками по всему миру? Имена файлов сложны, потому что они могут содержать экранированные кавычки. Если это html, вам может быть лучше использовать html-парсер. Или sub images/xxx с чем-то .. Также см. Это http://stackoverflow.com/questions/11794144/regular-expression-for-valid-filename –

ответ

0

Попробуйте вместо этого,

sed 's|/some/UNIX/path|/a/new/path|g' files 
0

При использовании СЭД для замены имен путей, изменяя его по умолчанию demiliter помогает, так как отметил Скайнет, и разумное использование одинарных кавычек позволяет переменной интерполяции, как это:

> a="\"hello/bye\"" 
> b="\"one/two\"" 
> echo $a 
"hello/bye" 
> echo $b 
"one/two" 
> echo $a|sed -e 's|'$a'|'$b'|' 
"one/two" 

от http://linux.die.net/man/1/sed SED не поддерживает POSIX. 2 основных регулярных выражения «полностью из-за проблем с производительностью», однако он приближается. Согласно http://www.regular-expressions.info/posix.html, одним из правил регулярных выражений POSIX является «Использование обратной косой черты, чтобы избежать символа, который никогда не является метасимволом, является ошибкой». Поскольку двойные и одинарные кавычки не являются метасимволами, они не должны быть обратно спящими в POSIX-regexes в соответствии с этим.

0

Использование sed с BRE:

sed "s/\([\"']\)[^\"']*\([\"']\)/\1somethingelse\2/g" file 

С ЭРД:

sed -r "s/([\"'])[^\"']*([\"'])/\1somethingelse\2/g" file 

Принято считать, что нет спасся цитаты в имени файла, т.е. нет цитаты внутри "..." и '...'

Смежные вопросы