вывод Linux показывает только право ':'

0

Я забыл много из моей командной строки. Я делаю, cat file | grep "error"и я хотел бы, чтобы это показывало все справа от G: / включая G: /, если это возможно. Я думаю, это команда awk, но я не знаю что. Я пытался, awk '{print $8+}'но + не работает, как я надеялся и догадался.


источник
Что такое макет файла?
Джон Т
1
Хм, G:/это Cygwin на Windows?
Ник

Ответы:

2

awk '/ G: / {напечатать substr ($ 0, совпадение ($ 0, / G: /)); }' файл

JRobert
источник
Это печатает полную строку. Также я могу видеть, что вы не проверяли, так как есть два), что дает ошибку. Решение sed выше работает.
Вы управляли этим? Я сделал. Он работает просто отлично, основываясь на вашем описании файла (который я понял как «вещи ... G: / больше вещей больше вещей»). Требуются две пары; один, чтобы закрыть match (), один, чтобы закрыть substr (). match () находит строку, которую вы хотели напечатать; substr () печатает, откуда эта строка начинается до конца строки. Также: пожалуйста.
JRobert
Ой, извини. Я сделал это, но я сделал это неправильно. Что объясняет, почему у меня была ошибка синтаксиса. ой, извините. Это прекрасно работает.
Я рад, что это сработало для вас. И я ценю продолжение - спасибо.
JRobert
1

Пытаться:

cat file | sed "s/.*\(G:\/\)/\1/"

Это удалит все раньше G:/. Имейте в виду, что если у вас есть несколько G:/записей, это будет соответствовать самой последней записи. Если вы работаете только с одним файлом, выполните:

sed "s/.*\(G:\/\)/\1/" file
Плачь Хавок
источник
Разве вы не хотите поймать текст после G:/конца строки? Вам не хватает пары символов в шаблоне ... Однако ведущий .*в шаблоне, вероятно, не позволит работать так, как ожидалось, даже с этим исправлением.
Ник
Я должен был сделатьsed "s/\(.*\)\(G:.*\)/\2/"
@ acidzombie24: Вам, вероятно, не нужно захватывать первую группу. Это, вероятно, будет работать: s/.*\(G:.*\)/\1/(скобки должны быть экранированы, если вы не используете -rопцию или ваша версия sedделает это за вас).
Деннис Уильямсон
Я скопировал результаты здесь неправильно. То, что произошло на моей стороне, было с тех пор, как первая группа не была поймана, их не заменили / они все еще появлялись в stdout.
1

Вы можете просто сделать:

  grep error file | grep -oP 'G:.+'

Примечания:

  1. Вам не нужно присматривать за файлом, просто напрямую введите в него «ошибку».
  2. Второй grep использует флаг P для регулярных выражений perl. Регулярное выражение говорит: найдите «G:» и любые последующие символы.
  3. Флаг о делает Grep напечатать найденную строку только :

    -o, --only-matching
          Print  only  the  matched  (non-empty) parts of a matching line,
          with each such part on a separate output line.
    
terdon
источник