Вам не нужно экранировать в sed, где '
не имеет особого значения. Вам нужно избежать его в bash.
$ sed -e "s/'/singlequote/g" <<<"'"
singlequote
Здесь видно, что двойные кавычки защищают одинарную кавычку от bash, и sed справляется с этим. Вот что происходит, когда вы переключаете одинарные кавычки.
$ sed -e 's/'/singlequote/g' <<<"'"
>
Странная вещь о '
в бурне, как снаряды (все? )заключается в том, что он действует не столько как "
, сколько как флаг, отключающий интерпретацию других символов, пока не будет замечен другой '
. Если вы заключите его в двойные кавычки, это не будет иметь особого значения. Соблюдайте:
$ echo 'isn'"'"'t this hard?'
isn't this hard?
Вы также можете использовать обратную косую черту, как показано в другом ответе. Но вы должны оставить блок с одинарными кавычками, прежде чем это сработает. Так что пока кажется, что это сработает:
echo '\''
нет; первый '
отключает значение символа \
.
Я предлагаю вам использовать другой подход. sed
выражения могут быть указаны как аргументы командной строки -, но за счет выхода из оболочки. Неплохо избежать короткого и простого выражения sed, но ваше довольно длинное и содержит много специальных символов.
Я бы поместил вашу команду sed
в файл и вызвал sed
с аргументом -f
, чтобы указать командный файл, а не указывать его в командной строке.http://man7.org/linux/man-pages/man1/sed.1.htmlили man sed
. Таким образом, команды sed
не являются частью того, что видит оболочка (, она видит только имя файла ), и загадка выхода из оболочки исчезает.
$ cat t.sed
s/'*/singlequote(s)/g
$ sed -f t.sed <<<"' ' '''"
singlequote(s) singlequote(s) singlequote(s)
Я не совсем понимаю, что вы имеете в виду, говоря only using csh script
. Можно ли использовать стандартные программы? Если да, то:
Самым простым решением для меня является использование grep
и awk
.
grep "module \w*" -o filename | awk '{print $2}'
dut
mid
bin
сawk
:
$ awk -F'[ \t#(;]+' '/^module/{ print $2}' infile
dut
mid
bin
med
печатать второе поле, где разделителями являются пробелы
/ Tab \t
/ #
/ ;
или (
и игнорировать повторы(+
)