Grep行頭


15

次の内容のファイルがあります。

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

括弧で始まるすべての行を抽出するにはどうすればよいですか?


4
何らかの理由で、私は...「Grepのは時間の始まり」をお読み
Mateen Ulhaq

回答:


32

行頭の記号は^です。そのため、最初の文字がであるすべての行を印刷するには、(一致させる必要があります^(

  1. grep

    grep '^(' file
    
  2. sed

    sed -n '/^(/p' file
    

6

を使用して perl

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

出力:

(((jfojfojeojfow 
(((jfojfojeojfow

説明(正規表現部分)

  • /^\(/

    • ^ 文字列の開始位置をアサートします
    • \(文字に(文字通り一致します

4

ここでbash1つのライナー:

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のワンライナーとして:

$ 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ルック

lookAT&T Unixバージョン7に登場した、古典的だがあまり知られていないUnixユーティリティの1つですman look

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
これは(、1で始まる行だけでなく、aを含むすべての行を印刷します。
テルドン

テルドンが言ったように。
コス

1
はい。行の先頭から一致を開始するために「^」文字を逃しました。そのために残念。
Thedler

1
今では良い=)+1
AB
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.