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?
06 Answers
The symbol for the beginning of a line is ^. So, to print all lines whose first character is a (, you would want to match ^(:
grepgrep '^(' filesedsed -n '/^(/p' file
Using perl
perl -ne '/^\(/ && print' foo Output:
(((jfojfojeojfow (((jfojfojeojfow Explanation (regex part)
/^\(/^assert position at start of the string\(matches the character(literally
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.
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 0You may do the inverse.
grep -v '^[^(]' file or
sed '/^[^(]/d' file 1Use the grep command for this. Assuming the file with the mentioned content is called t.txt:
user:~$ grep '^(' t.txt (((jfojfojeojfow (((jfojfojeojfow With '--color' as further argument you can even see in color in the terminal what matches. This instruction also do not match empty lines.
1