Grep Zeilenanfang

15

Ich habe eine Datei mit folgendem Inhalt:

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

Wie kann ich jede Zeile extrahieren, die mit einer Klammer beginnt?

user3069326
quelle
4
Aus irgendeinem Grund las ich "
Grep begin

Antworten:

32

Das Symbol für den Zeilenanfang ist ^. Wenn Sie also alle Zeilen drucken (möchten, deren erstes Zeichen ein a ist , müssen Sie Folgendes eingeben ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    
terdon
quelle
6

Verwenden perl

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

Ausgabe:

(((jfojfojeojfow 
(((jfojfojeojfow

Erklärung (Regex-Teil)

  • /^\(/

    • ^ Position am Anfang der Zeichenkette festlegen
    • \(entspricht dem Zeichen (wörtlich
AB
quelle
4

Hier ist ein bashEinzeiler:

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

Hier lesen wir jede Eingabezeile und wenn die Zeile mit beginnt (, wird die Zeile gedruckt. Der Haupttest wird von durchgeführt [[ $i =~ ^\( ]].

Verwenden von python:

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

Hier wird line.startswith('(')geprüft, ob die Zeile mit beginnt (. Wenn ja, wird die Zeile gedruckt.

heemayl
quelle
3

awk

awk '/^\(/' testfile.txt

Ergebnis

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

Python

Als Python-Einzeiler:

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

Oder alternativ:

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

BSD-Look

lookist eines der klassischen , aber wenig Unix - Werkzeuge bekannt, die 7. Vom Weg zurück in AT & T Unix - Version erschienen man look:

Das Dienstprogramm look zeigt alle Zeilen in der Datei an, die Zeichenfolgen als Präfix enthalten

Das Ergebnis:

$ look "(" input.txt
(((jfojfojeojfow 
(((jfojfojeojfow
Sergiy Kolodyazhnyy
quelle
2

Sie können das Gegenteil tun.

grep -v '^[^(]' file

oder

sed '/^[^(]/d' file
Avinash Raj
quelle
Wenn die Eingabedatei Leerzeilen enthält, werden auch die Leerzeilen angezeigt.
AB
1

Verwenden Sie dazu den Befehl grep. Angenommen, die Datei mit dem genannten Inhalt heißt t.txt:

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

Mit '--color' als weiteres Argument können Sie sogar in Farbe im Terminal sehen, was passt. Diese Anweisung stimmt auch nicht mit Leerzeilen überein.

thedler
quelle
4
Damit werden alle Zeilen gedruckt, die ein enthalten (, nicht nur die, die mit einem beginnen.
Terdon
Wie Terdon sagte.
Kos
1
Ja. Verpasste das Zeichen '^', um die Übereinstimmung am Zeilenanfang zu starten. Das tut mir leid.
Thedler
1
Jetzt ist es besser =) +1
AB