Grep beginning of line

56,791

Solution 1

The symbol for the beginning of a line is ^. So, to print all lines whose first character is a (, you would want to match ^(:

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    

Solution 2

Using perl

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

Output:

(((jfojfojeojfow 
(((jfojfojeojfow

Explanation (regex part)

  • /^\(/

    • ^ assert position at start of the string
    • \( matches the character ( literally

Solution 3

Here is a bash one liner:

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

Here we are reading each line of input and if the line starts with (, the line is printed. The main test is done by [[ $i =~ ^\( ]].

Using python:

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

Here line.startswith('(') checks if the line starts with (, if so then the line is printed.

Solution 4

awk

awk '/^\(/' testfile.txt

Result

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

Python

As python one-liner:

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

Or alternatively:

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

BSD look

look is one of the classic but little known Unix utilities, which appeared way back in AT&T Unix version 7. From man look:

The look utility displays any lines in file which contain string as a prefix

The result:

$ look "(" input.txt
(((jfojfojeojfow 
(((jfojfojeojfow

Solution 5

You may do the inverse.

grep -v '^[^(]' file

or

sed '/^[^(]/d' file
Share:
56,791

Related videos on Youtube

user3069326
Author by

user3069326

Updated on September 18, 2022

Comments

  • user3069326
    user3069326 over 1 year

    I have a file with the following contents:

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

    How can I extract every line that starts with a parenthesis?

  • A.B.
    A.B. almost 9 years
    If the input file contains empty lines, the blank lines are also displayed.
  • thedler
    thedler almost 9 years
    Yes. Missed the '^' character to start the match at the beginning of the line. Sorry for that.