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

974

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

0
Что такое макет файла? John T 13 лет назад 0
Хм, `G: /` - это Cygwin на Windows? nik 13 лет назад 1

3 ответа на вопрос

2
JRobert

awk '/ G: / ' файл

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

Пытаться:

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

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

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

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

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

Заметки:

  1. Вам не нужно присматривать за файлом, просто непосредственно введите grep 'error'.
  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. 

Похожие вопросы