그렙 시작 라인


15

다음 내용의 파일이 있습니다.

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

괄호로 시작하는 모든 줄을 어떻게 추출 할 수 있습니까?


4
어떤 이유로, 나는 ... "그렙 시간의 시작"읽기
Mateen Ulhaq

답변:


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

어 wk

awk '/^\(/' testfile.txt

결과

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

파이썬

파이썬 원 라이너 :

$ 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 유틸리티 중 하나입니다 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
이것은로 (시작 하는 행 뿐만 아니라을 포함하는 모든 행을 인쇄합니다 .
terdon 2016 년

terdon이 말했듯이.
kos

1
예. 줄의 시작 부분에서 일치를 시작하기 위해 '^'문자가 누락되었습니다. 그 죄송합니다.
thedler

1
이제 더 낫다 =) +1
AB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.