Grep начало строки

15

У меня есть файл со следующим содержанием:

(((jfojfojeojfow 
//
hellow_rld
(((jfojfojeojfow
//
hellow_rld

Как я могу извлечь каждую строку, которая начинается с круглых скобок?

user3069326
источник
4
Почему-то я читаю "Grep начало времени" ...
Матеин Улхак

Ответы:

32

Символом для начала строки является ^. Итак, чтобы напечатать все строки, чей первый символ - это (, вы хотите сопоставить ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    
terdon
источник
6

С помощью perl

perl -ne '/^\(/ && print' foo

Выход:

(((jfojfojeojfow 
(((jfojfojeojfow

Пояснение (часть регулярного выражения)

  • /^\(/

    • ^ утвердить позицию в начале строки
    • \((буквально соответствует персонажу
AB
источник
4

Вот bashодин вкладыш:

while IFS= read -r line; do [[ $line =~ ^\( ]] && echo "$line"; done <file.txt

Здесь мы читаем каждую строку ввода, и если строка начинается с (, строка печатается. Основной тест сделан [[ $i =~ ^\( ]].

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

#!/usr/bin/env python2
with open('file.txt') as f:
    for line in f:
        if line.startswith('('):
            print line.rstrip()

Здесь line.startswith('(')проверяется, начинается ли строка с (, если это так, то строка печатается.

heemayl
источник
3

AWK

awk '/^\(/' testfile.txt

Результат

$ awk '/^\(/' testfile.txt                   
(((jfojfojeojfow 
(((jfojfojeojfow

питон

Как питон однострочный:

$ python -c 'import sys;print "\n".join([x.strip() for x in sys.stdin.readlines() if x.startswith("(")])' < input.txt    
(((jfojfojeojfow
(((jfojfojeojfow

Или в качестве альтернативы:

$ python -c 'import sys,re;[sys.stdout.write(x) for x in open(sys.argv[1]) if re.search("^\(",x)]' input.txt

BSD смотреть

lookэто одна из классических, но малоизвестных утилит Unix, появившаяся еще в AT & T Unix версии 7. От man look:

Утилита look отображает любые строки в файле, которые содержат строку в качестве префикса

Результат:

$ look "(" input.txt
(((jfojfojeojfow 
(((jfojfojeojfow
Сергей Колодяжный
источник
2

Вы можете сделать обратное.

grep -v '^[^(]' file

или

sed '/^[^(]/d' file
Авинаш Радж
источник
Если входной файл содержит пустые строки, также отображаются пустые строки.
AB
1

Используйте команду grep для этого. Предполагая, что файл с указанным содержимым называется t.txt:

user:~$ grep '^(' t.txt
(((jfojfojeojfow
(((jfojfojeojfow

С '--color' в качестве дополнительного аргумента вы можете даже увидеть в терминале цвет, что соответствует. Эта инструкция также не соответствует пустым строкам.

thedler
источник
4
Это напечатает все строки, содержащие, а (не только те, которые начинаются с одной.
тердон
Как сказал Тердон.
Кос
1
Да. Пропустил символ '^', чтобы начать совпадение в начале строки. Простите за это.
малыш
1
Теперь лучше =) +1
AB