6

Например,

sed 's/string/ /g' where string="a\c:ti]\']x""/\//:`~$%#^&"'

То есть, как передать строку в sed буквально, а не как интерпретируемый шаблон регулярных выражений?

Я собираюсь использовать это с Cygwin и на Ubuntu, поэтому решения должны быть совместимы с окружающей средой.

2 ответа2

3

Вы должны экранировать специальные символы и использовать разделитель, отличный от "/".

sed 's#string1#string2#'
1

Смотрите это SOq:

Этот ответ на выше:

это то, что вам нужно, за исключением того, что вы делаете это в первой, а не во второй части s/first/second/ .

Поскольку вы используете оба ' и " в своих командах sed, вам придется избегать некоторых из них. Попробуйте сделать это - создайте два файла:

1.sed

s_"a\\c:ti]\\']x""/\\//:`~\$%#\^&"'_ _g

2.txt

"a\c:ti]\']x""/\//:`~$%#^&"'hello world m"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'this is working"a\c:ti]\']x""/\//:`~$%#^&"'
"a\c:ti]\']x""/\//:`~$%#^&"'as expected"a\c:ti]\']x""/\//:`~$%#^&"'

1.sed - это сам скрипт, а 2.txt - тестовый файл. Запустите это так, чтобы проверить:

$ sed -f 1.sed 2.txt
 hello world m 
 this is working 
 as expected 

$ 

Надеюсь это поможет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .