Как извлечь слово, которое находится между двумя ключевыми словами в строке?

Вам не нужно экранировать в 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)

1
21.01.2021, 13:10
3 ответа

Я не совсем понимаю, что вы имеете в виду, говоря only using csh script. Можно ли использовать стандартные программы? Если да, то:

Самым простым решением для меня является использование grepи awk.

grep "module \w*" -o filename | awk '{print $2}'
dut
mid
bin
0
18.03.2021, 22:36

Использование (gnu )grep:

 grep -Po 'module +\K\w+' file
2
18.03.2021, 22:36

сawk:

$ awk -F'[ \t#(;]+' '/^module/{ print $2}' infile
dut
mid
bin
med

печатать второе поле, где разделителями являются пробелы / Tab \t/ #/ ;или (и игнорировать повторы(+)

0
18.03.2021, 22:36

Теги

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