sed를 사용하여 캡처

sed를 사용하여 캡처

이런 파일이 있어요

x   +   chrX    15362   15364   +   100(3)  *(0)    *(0)    *(0)    100(5)  *(0)    100(1)
y   +   chrX    153626  153626  +   100(80) 98.56(79)   100(40) 100(47) 100(88) 4(23)

괄호 안의 값을 캡처하여 출력이 다음과 같이 보이도록 인쇄하고 싶습니다.

x   +   chrX    15362   15364   +   3   0   0   0   5   0   1
y   +   chrX    153626  153626  +   80  79  40  47  88  23

나는 이것을 sed에서하고 싶다.

이런 식으로 시도했지만 작동하지 않습니다

sed -r 's/^.*\((\d+)\)/\1/g'

또한 다음과 같은 출력을 얻을 수 있도록 괄호 안의 모든 항목(괄호 포함)을 제거하려면 어떻게 해야 합니까?

x   +   chrX    15362   15364   +   100 *   *   *   100 *   100
y   +   chrX    153626  153626  +   100 98.56   100 100 100 4

답변1

$ sed 's/([^)]*)//g' file
x   +   chrX    15362   15364   +   100  *    *    *    100  *    100
y   +   chrX    153626  153626  +   100 98.56   100 100 100 4

sed여기서는 입력에서 대괄호를 제거하는 데 사용합니다 . 이 표현식은 ([^)]*)여는 괄호, 오른쪽이 아닌 괄호 문자(예: 숫자) 및 마지막으로 닫는 괄호와 일치합니다. 여기서도 ([0-9]*)사용할 수 있습니다.

$ sed 's/[^[:blank:]]*(\([^)]*\))/\1/g' file
x   +   chrX    15362   15364   +   3  0    0    0    5  0    1
y   +   chrX    153626  153626  +   80 79   40 47 88 23

여기서는 괄호 앞의 비트와 괄호 자체를 제거하고 모든 것을 괄호 안에 있는 것으로 교체합니다. (match 앞에 오는 것 [^[:blank:]]*, 즉 공백이 아닌 문자의 수에 관계없이 첫 번째 명령과 동일한 표현식이 뒤따르지만 sed및 사이의 내용을 캡처합니다. 캡처된 문자열은 명령의 대체 부분에서 인용됩니다.()\1


주문,

sed -r 's/^.*\((\d+)\)/\1/g'

\dPCRE(Perl과 유사한 정규식)이기 때문에 작동하지 않습니다 . 또는 \d로 바꾸면 전체 줄이 마지막 괄호 안의 숫자로 바뀌므로 더 잘 작동하지 않습니다.[0-9][[:digit:]]

답변2

이 시도:sed -r 's/[^[:blank:]]*\(([[:digit:]]+)\)/\1/g'

  • 0개 이상의 공백이 아닌 문자를 찾고 그 뒤에 여는 괄호, 숫자(캡처), 닫는 괄호가 옵니다.
  • 캡쳐된 숫자로만 교체
  • 전역적으로 수행
  • \d확장 정규 표현식이 아닌 PCRE 구문입니다.

미적인 측면을 위해 출력을 파이프합니다 | column -t.

관련 정보