Grep行首


15

我有一个包含以下内容的文件:

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

如何提取以括号开头的每一行?


4
出于某种原因,我读了“ Grep开始的时间” ...
Mateen Ulhaq

Answers:


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一线式:

$ 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


1

为此,请使用grep命令。假设包含上述内容的文件称为t.txt:

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

使用'--color'作为进一步的参数,您甚至可以在终端的颜色中看到匹配的内容。该指令也与空行不匹配。


4
这将打印所有包含a的行(,而不仅仅是以1开头的行。
terdon

正如泰登所说。
kos 2015年

1
是。错过了'^'字符,因此无法从行首开始比赛。抱歉
特德勒2015年

1
现在更好=)+1
AB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.