Awk или grep вопрос - PullRequest
       9

Awk или grep вопрос

3 голосов
/ 18 февраля 2011

У меня есть этот файл данных

[abc]
def
ghi
[jkl]
[mno]

Из этого файла;я могу запустить grep и легко получить все строки, в которых есть «[».Как мне получить содержимое текста внутри "[]".

Например:

abc
jkl
mno

Спасибо

Ответы [ 4 ]

3 голосов
/ 18 февраля 2011

Попробуйте:

sed -n 's/\[\([^]]*\)\]/\1/p'

или

awk -F "[][]" '$2 != "" {print $2}'

или

grep -Po '(?<=\[)[^]]*(?=])'
2 голосов
/ 18 февраля 2011
sed -n 's/\[\(.*\)\]/\1/p' file

Объяснение: -n подавляет печать каждой строки в STDOUT, но /p в конце регулярного выражения повторно включает это поведение, вызывая печать всех совпадающих строк. Само регулярное выражение сопоставляет все в квадратных скобках и заменяет собой всю строку.

0 голосов
/ 18 февраля 2011

вот как вы можете сделать это с помощью awk

$ cat file
[abc]
def [ xxx]
ghi
[jkl]
[mno]
[zz
zzzz]


$ awk 'BEGIN{RS="]";FS="["}/\[/{print $NF }' file
abc
 xxx
jkl
mno
zz
zzzz

Ruby (1.9 +)

 ruby -0777 -ne 'puts $_.scan(/\[(.*?)\]/m)' file

Или вы можете сделать это только с помощью оболочки

$ var=$(<file)
$ IFS="]"
$ set -- $var
$ for i in $@; do echo ${i##*[}; done
0 голосов
/ 18 февраля 2011

grep "\ [" | sed -e 's / \ [//' -e 's / \] //'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...