Использование sed для возврата значения после '=' - PullRequest
1 голос
/ 20 октября 2011

читал команду sed в Unix, и я думаю, что она будет делать то, что я хочу, просто не уверен в ее сумасшедшем синтаксисе.

По сути, я хочу получить только значение в скобках послеCount = в последней строке файла.Итак, в строке будет Count=[#], и я хочу, чтобы только # был возвращен.Какие-нибудь мысли?Является ли sed даже лучшим выбором (слышал, что awk может сделать что-то подобное)?

Ответы [ 4 ]

2 голосов
/ 20 октября 2011

Немного другой подход:

echo 'Count=[#]' | sed 's/.*\[\(.*\)\].*/\1/'

Соответствует тексту между [ и ] и заменяет всю строку им.

1 голос
/ 20 октября 2011

Еще один подход:

sed -n '$ {s/Count=\[\([^]]\+\)\]/\1/;p}' yourfile

-n не печатать, кроме как с p.

$ для последней строки.

s/search/replace/ поиск будет заменен заменой.

\([^]]\+\) захватывает одно или несколько случаев, когда '' '' ^].

\1 относится к тому, что было захвачено.

p печать строки.

То, что я вижу, это единственный ответ, принимая во внимание, что в любой строке может присутствовать Count = [#].Вы утверждаете, что это должно происходить только для последней строки: «после Count = в последней строке файла».

1 голос
/ 20 октября 2011
kent$  echo "Count=[#]"|awk -F'[][]' '{print $2}'
#


kent$  echo "Count=[#]"|sed -r 's/.*\[(.*)\].*/\1/'
#
0 голосов
/ 20 октября 2011

С помощью sed просто используйте пару регулярных выражений для удаления ненужной части:

sed -e 's/^Count=\[//' -e 's/\]$//' < file.txt

или

sed 's/^Count=\[//;s/\]$//' < file.txt

Первое выражение удалит Count=[и второе выражение удалит завершающий ].

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