Условная замена с использованием sed?

А поскольку вы находитесь в csh, это можно очень просто записать как:

mkdir "/tmp/userid_${cwd:t}"

где из текущего каталога $cwdмы можем получить его базовое имя с помощью модификатора :t.

1
11.10.2019, 12:35
2 ответа

Суть в том, чтобы добавить немного больше контекста в регулярное выражение:

sed -e "s#\\(url(\\\\'\\)\\(test.png\\\\')\\)#\1/navigation/\2#g"

Также обратите внимание, что:

  • Внутри двойных кавычек 'не имеет особого значения.
  • В двойных кавычках вам нужно написать \\, чтобы получить один \.
1
27.01.2020, 23:30

Вы можете использовать [^/]для соответствия любому символу, кроме косой черты, и использовать url(\'[^/]в качестве шаблона в вашей команде s. Это, конечно, уничтожит ваш первый символ, поэтому вам нужно сделать из него подвыражение \([^/]\), чтобы вы могли сохранить его как \1в замене:

sed -i "s#url(\\\'\\([^/]\\)#url(\\\'/navigation/\\1#g" "main.js"

Другой попыткой было бы всегда заменить, но вернуться, если косая черта уже была:

sed -i "s#url(\\\'#url(\\\'/navigation/#g;s#navigation//##g" "main.js"
1
27.01.2020, 23:30

Теги

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