Получить указанное соответствие под строкой - PullRequest
0 голосов
/ 07 января 2012

Я пытаюсь сопоставить содержимое строки, которая содержит последовательности кавычек, используя Shell Script, в то время, когда я получил следующее:

et="\"He\" \"llo\""
echo $et | sed -e '/\"(.*?)\"/g'

, который возвращает это:

"Он", "llo"

Но я не хочу, чтобы на результате появлялись кавычки, как я могу echo только первый или второй,или третий и т. д. совпадают?

Ответы [ 4 ]

1 голос
/ 07 января 2012

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

echo $et | perl -ne '/"[^"]+"/ and print "$&\n";'

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

echo $et | perl -ne '/"[^"\\]+(\\.[^"]*)*"/ and print "$&\n";'
1 голос
/ 07 января 2012

sed -e 's/"\([^"]*\)"/\1/g' удалит кавычки вокруг сбалансированных " кавычек. Чтобы показывать только первое, второе совпадение и т. Д. С помощью sed, вам, вероятно, придется создавать разные группы захвата.

$ echo '"1" "2" "3"' | sed -e 's/"\([^"]*\)" "\([^"]*\)" "\([^"]*\)"/\2/g'
2
$
0 голосов
/ 08 января 2012

Вы также можете сделать что-то вроде этого:

[srikanth@myhost ~]$ echo "\"He\" \"llo\"" | awk ' { match($0,/([A-Za-z]+)[" ]+([A-Za-z]+)/,a); print a[1]","a[2]} '
He,llo
0 голосов
/ 08 января 2012

Это намного проще с awk, поскольку вы можете указать двойную кавычку в качестве разделителя полей.

$ et='"He" "llo"'
$ awk -F'"' '{print $2}' <<<$et
He
$ awk -F'"' '{print $4}' <<<$et
llo

Примечание : Этотакже масштабируемые и строковые поля будут кратны двум, то есть $ 2, $ 4, $ 6 и т. д.

...