시작 문자열 구분 기호와 끝 문자 구분 기호 사이의 모든 텍스트를 가져옵니다.

시작 문자열 구분 기호와 끝 문자 구분 기호 사이의 모든 텍스트를 가져옵니다.

Linux에서 파일을 구문 분석하고 싶습니다. 기본적으로 이런 패턴이 나올 때마다 [protein=proteinA]유지하고 싶다 proteinA. 즉, 다음 9개 문자 사이의 모든 문자를 유지하고 싶습니다.

 [protein=

그리고 캐릭터:

]

파일의 모든 패턴에 대해 이 작업을 수행하고 싶습니다. 결과는 다음과 같습니다.

proteinA
proteinB
proteinC
proteinD

Linux에서 이를 달성하는 간단한 명령은 무엇입니까?

답변1

간단한 sed해결책은

 sed 's/\[protein=\(.*\)]/\1/'

입력의 모든 줄이 동일해 보인다면 위 명령이 제대로 작동하는 것입니다. 다른 유형의 데이터가 있고 위에서 얻은 결과가 마음에 들지 않으면 원하는 결과를 지정해야 합니다.[protein=something]

답변2

텍스트가 포함될 수 있는 레이블에 대한 일반적인 해결 방법은 다음 sed 명령을 사용하는 것입니다.

sed -i.bak 's/\[[^=]*=\([^]]*\)]/\1/g' <file to process>

[tagname=something]이 명령은 , 및 에서 작동하며 태그 이름은 [tagname=]아닌 무엇이든 될 수 있습니다 protein.

-i.bak파일을 처리하고 원본 파일을 .bak확장자와 함께 파일 이름에 추가합니다.

답변3

grep원하는 데이터를 직접 출력할 수 있습니다 .

$ grep -oP '\[protein=\K((?!]).)+(?=])' file

관련 정보