Разбор строки с grep - PullRequest
       24

Разбор строки с grep

0 голосов
/ 14 ноября 2011

Мне нужна помощь с анализом строки в Linux.

У меня есть строка:

[INFO] Total time: 2 minutes 8 seconds

и хочу получить только

2 minutes 8 seconds

Ответы [ 6 ]

7 голосов
/ 14 ноября 2011

Опции sed и perl работают, но в этом тривиальном случае я бы предпочел

 echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2

Если у вас есть что-то против пробелов, вы можете просто использовать

 echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2 | xargs

или даже ...

 echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2 | cut -c2-

PS.Общая информация: вы могли бы сделать это с grep, только если grep реализовал позитивный вид, подобный этому egrep -o '(?<=: ).*';К сожалению, ни расширенное регулярное выражение POSIX, ни расширенное регулярное выражение GNU не реализуют lookbehind (http://www.regular -expressions.info / refflavors.html)

4 голосов
/ 14 ноября 2011

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

$ echo '[INFO] Total time: 2 minutes 8 seconds' | grep -o '[[:digit:]].*$'
2 minutes 8 seconds

Или sed:

$ echo '[INFO] Total time: 2 minutes 8 seconds' | sed 's/.*: //'
2 minutes 8 seconds

или awk:

$ echo '[INFO] Total time: 2 minutes 8 seconds' | awk -F': ' '{print $2}'
2 minutes 8 seconds

или cut:

$ echo '[INFO] Total time: 2 minutes 8 seconds' | cut -d: -f2
 2 minutes 8 seconds

А затем прочитайте sed & awk, второе издание .

3 голосов
/ 14 ноября 2011

Если префикс строки всегда одинаков, просто используйте sed и замените префикс пустой строкой:

sed 's/\[INFO\] Total Time: //'

Предполагая, что время всегда является последним в строке после двоеточия, используйтеследующее регулярное выражение (замените каждую строку всем после двоеточия):

sed 's/^.*: \(.*\)$/\1/'
0 голосов
/ 02 сентября 2014

Если вы получаете информацию из терминала, тогда вы можете извлечь информацию и использовать команду cut with delimiter, чтобы удалить все перед информацией, которую вы хотите.grep INFO |cut -f2 -d:

Если вы хотите получить информацию из файла, вы можете выполнить grep файла grep INFO somefilename |cut -f2 -d:

0 голосов
/ 16 ноября 2011

Если вы предпочитаете AWK, тогда это довольно просто

echo "[INFO] Total time: 2 minutes 8 seconds" | awk -F": " '{ print $2 }'
0 голосов
/ 14 ноября 2011

Используйте sed или perl:

echo "[INFO] Total time: 2 minutes 8 seconds" | sed -e 's/^\[INFO\] Total time:\s*//'
echo "[INFO] Total time: 2 minutes 8 seconds" | perl -pe "s/^\[INFO\] Total time:\s*//;"
...