이런 파일이 있어요
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'
\d
PCRE(Perl과 유사한 정규식)이기 때문에 작동하지 않습니다 . 또는 \d
로 바꾸면 전체 줄이 마지막 괄호 안의 숫자로 바뀌므로 더 잘 작동하지 않습니다.[0-9]
[[:digit:]]
답변2
이 시도:sed -r 's/[^[:blank:]]*\(([[:digit:]]+)\)/\1/g'
- 0개 이상의 공백이 아닌 문자를 찾고 그 뒤에 여는 괄호, 숫자(캡처), 닫는 괄호가 옵니다.
- 캡쳐된 숫자로만 교체
- 전역적으로 수행
\d
확장 정규 표현식이 아닌 PCRE 구문입니다.
미적인 측면을 위해 출력을 파이프합니다 | column -t
.