Как получить строки, начинающиеся с цифры И содержащие определенную строку - PullRequest
0 голосов
/ 19 октября 2018

Как использовать grep для вывода строк, которые начинаются с цифры 1 и в то же время содержат строку.

1 A ATC
1 ATT T
1 ATG 8
2 ATC 1

Например, здесь мне нужна строка, начинающаяся с 1 и содержащая ATC. Я бы хотел, чтобы grep перечислил 1 A ATC.

Обратите внимание, что мне не нужны строки си 1, и ATC, вместо этого мне нужно, чтобы они начинались с 1, а ATC на этой же линии

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Вы можете использовать любую из следующих grep команд:

grep '^1 .*ATC' <<< "$s"
grep '^1\b.*ATC' <<< "$s"
grep '^1\>.*ATC' <<< "$s"
grep -E '^1([^0-9].*)?ATC' <<< "$s"

См. онлайн-демонстрацию

Подробно

  • ^1 .*ATC соответствует строке, которая начинается с 1 (см. ^1, где ^ - начало строки), затем пробел (замените на [[:blank:]][[:blank:]]*, чтобы соответствовать 1 или более горизонталипробелы ), then any 0+ chars followed with ATC`
  • ^1\b.*ATC и его эквивалент ^1\>.*ATC match 1 в начале строки, затем проверяется положение границы слова, затем любые 0+ символов с последующим ATC
  • ^1([^0-9].*)?ATC немного более продвинутый: 1 сопоставляется в начале строки, затем выполняется дополнительная последовательность: любой нецифровый символ ([^0-9]), а затем любой 0+ chars. Затем, ATC будет сопоставлено. Это решение позволяет 1ATC совпадать.
0 голосов
/ 19 октября 2018

grep не тот инструмент для этого.Если вы хотите выполнять арифметические операции (проверяя целочисленное значение столбца, а не текстовое представление), вам нужно awk:

awk '$1 == 1 && /ATC/' input-file
0 голосов
/ 19 октября 2018

Если вы ищете строки, которые начинаются с «1» и содержат «ATC», это, вероятно, проще всего сделать:

grep '^1.*ATC'
...