Греп початок рядка


15

У мене є файл із таким вмістом:

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

Як я можу витягти кожен рядок, який починається з дужок?


4
Чомусь я читав "Греп початок часу" ...
Mateen Ulhaq

Відповіді:


32

Символом початку рядка є ^. Отже, для друку всіх рядків, першим символом яких є (, ви хочете відповідати ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    

6

Використання perl

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

Вихід:

(((jfojfojeojfow 
(((jfojfojeojfow

Пояснення (регулярна виразка)

  • /^\(/

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

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('(')перевіряється, чи починається рядок (, якщо так, то рядок друкується.


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, яка з'явилася ще у версії 7. ​​AT&T Unix. З man 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" як додатковий аргумент, ви навіть можете побачити кольором у терміналі, що відповідає. Ця інструкція також не відповідає порожнім рядкам.


4
Це буде друкувати всі рядки, що містять a (, не тільки ті, що починаються з одного.
тердон

Як сказав Тердон.
kos

1
Так. Пропущений символ '^' розпочав збіг на початку рядка. Вибачте за це.
thedler

1
Тепер краще =) +1
AB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.