두 괄호 사이에 문자열을 인쇄


14

이 줄에 파일이 있습니다

G8 = P(G1,G3)
G9 = P(G3,G4)
G12 = P(G2,G9)
G15 = P(G9,G5)
G16 = P(G8,G12)
G17 = P(G12,G15)

나는 출력을 필요로한다.

G1,G3
G3,G4
.....

sed / grep 명령이나 perl을 사용하여 어떻게 할 수 있습니까?

답변:


18

다른 방법들 :

  • sed

    sed 's/.*(\(.*\))/\1/' file 
  • perl -pe 's/.*\((.*)\)/$1/' file 

    또는

    perl -lanF"[()]" -e 'print $F[1]' file 

    또는

    perl -pe 's/.*\((.+?)\).*/$1/;' file 
  • awk

    awk -F"[()]" '{print $2}' file 
  • 껍질

    while IFS="()" read a b; do echo "$b"; done < file 

? 당신은 더 많은 AWK 방법 작품은, 쉬운 너무 기억하는 방법에 대해 말할 것
satch_boogie

1
@satch_boogie는 -Fawk가 줄을 필드로 나누는 데 사용할 문자를 선택할 수있게합니다. 여기서는 []여는 괄호와 닫는 괄호로 구성된 문자 클래스 ( )를 제공합니다 . 따라서 줄을 껐다 켜게 (됩니다 ). 결과적으로 두 번째 필드는 괄호의 내용이됩니다. 예를 들면, 문자열로 G8 = P(G1,G3)foo, $1G8 = P, $2G1,G3$3foo.
terdon

7

여러 가지 방법이 있습니다.

perl -nle 'print $1 if /\((.*)\)/' file

또는:

awk 'NR > 1 {print $1}' RS='(' FS=')' file

5
grep -oP '\(\K[^)]+' file

이것은 여는 괄호를 찾고 무시한 다음 뒤에 오는 괄호가 아닌 모든 문자를 인쇄합니다.

GNU grep 필요


5

sed 's/^.*(//;s/)$//' /path/to/file

이것을 분해하려면 :

sed는 IS stream의 ed당사 홈페이지는. 's/^.*(//;s/)$//'로 전송되는 스크립트 sed는 다음과 같이 분류됩니다.

s/^.*(//    substitute nothing for the beginning of any line (`^`) followed by anything up until an open-paren (`(`)
s/)$//      substitute nothing for a close-paren (`)`) followed immediately by the end of a line

1

간단한 컷 솔루션 :

$ cat test01 | cut -d "("-f2 | cut -d ")"-f1


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