Сценарий Sed и Applescript - строка символов - PullRequest
1 голос
/ 21 ноября 2010

Я пытаюсь использовать sed в сценарии оболочки в Applescript для удаления этой строки -? Print = 1 - из этой ссылки html в переменной the_html, которая равна <a href="http://myurl.com.html?print=1">my link</a>

, но это выдаетошибка:

set new_html to do shell script "echo " & quoted form of the_html & " | sed s=?print=1= =g'"

Нужно ли экранировать "="?

Редактировать:

Работает сейчас.Applescript не понравился = экранированный \, но экранирование всей строки работает:

sed 's/?print=1//g'

Ответы [ 4 ]

1 голос
/ 21 ноября 2010

Это работает на моем Mac:

echo '<a href="http://myurl.com.html?print=1">my link</a>' | sed 's=?print\=1= =g'

Так что ответ, да, вам действительно нужно экранировать =, поскольку он использует разделитель выражений.

1 голос
/ 21 ноября 2010

Попробуйте это:

echo '<a href="http://myurl.com.html?print=1">my link</a>' | sed 's/?print=1/ /g'

Комментарии:

  • Поместите HTML в кавычки или экранируйте его свойство
  • При использовании sed вы обычно используете косую черту: 's / a / b /'
1 голос
/ 21 ноября 2010

Да.Вам нужно избегать персонажей, которые имеют особое значение.Теперь есть стандартные специальные символы регулярного выражения и символ, который вы используете в качестве разделителя.Поэтому, если вы используете = в качестве разделителя, вам нужно экранировать его с помощью \.

Обычно / используется в качестве разделителя.Исключение составляют случаи, когда вы можете искать /, что приводит к довольно сумасшедшим и трудно читаемым выражениям со всем экранированием.Поэтому, если вы ищете / s, я бы предложил использовать другой символ, но в противном случае придерживайтесь /.

Чтобы ответить на ближайший вопрос, вы можете избежать =:

sed '= print \ = 1 = = g'

или используйте стандартную косую черту, не экранируя =:

sed '/ print = 1 // г '

0 голосов
/ 21 ноября 2010

Вам не нужно экранировать '=', если используется другой разделитель sed, например '/' или ','.Но если вы хотите получить URL параметры :

С префиксом '?':

 echo '<a href="http://myurl.com.html?print=1">my link</a>' \
    | sed -e 's,.*\(?.*\)\".*,\1,'

Без '?':

echo '<a href="http://myurl.com.html?print=1">my link</a>' \
    | sed -e 's,.*?\(.*\)\".*,\1,'

Лучше всего также разделить параметры:

$ echo '<a href="http://myurl.com.html?print=1&convert=4">my link</a>' \
    | sed -e 's,.*?\(.*\)\".*,\1,' -e 's,&,\n,g'
print=1
convert=4

Веселитесь!:)

...