특정 문자로 시작하고 다른 문자로 끝나는 모든 문자열을 grep합니다.

특정 문자로 시작하고 다른 문자로 끝나는 모든 문자열을 grep합니다.

"["로 시작하고 일부 문자열(예: "apal")로 끝나는 모든 문자열을 grep해야 합니다. 따라서 이 두 문자 사이의 모든 문자도 표시됩니다. 입력이 주어지면 예를 들면 다음과 같습니다.

[44060]apal223reaea[55000]opoer4nr4on[95749]assad fdfdf Bhassrj sdaapald33qdq3d3da3ded[66000]dsfsldfsfldkj[77000]porpo4o4o3j3mlkfxxxx[101335]KaMMMM MMM lapa[131322]sadasds ddd apaladsdas[138133]sadasdadasddsss KMMapaldsadsadwe[150000]idhoqijdoiwjodwiejdw

결과는 거짓말이겠지

[44060]apal
[95749]assad fdfdf Bhassrj sdaapal
[101335]KaMMMM MMM lapal
[131322]sadasds ddd apal
[138133]sadasdadasddsss KMMapal

답변1

사용:

grep -o '\[.*apal' file.txt

file.txt실제 파일 이름으로 바꾸십시오 .

반면에 [줄의 시작 부분에서 일치시키려면 다음을 수행하십시오.

grep -o '^\[.*apal' file.txt

답변2

노력하다:

grep -o '^\[.*apal$' file.txt

정규 표현식과 일치하는 명령: ....... grep
일치하는 데 사용오직정규식을 작성하세요. .......... -o
줄의 시작 부분과 일치하는 데 사용합니다. .............use ^: ^\[
사이의 모든 문자와 일치하는 데 사용합니다. .use .: .*
끝과 일치하는 데 사용합니다. 한 줄, ...............use $: apal$
일치시킬 내용이 포함된 파일입니다. :파일.txt

답변3

grep 대신 sed를 사용하는 것이 좋습니다.

sed 's/.*\(X.*Y\)/\1/p' < file.txt

X를 시작 패턴으로 바꾸고 Y를 끝 패턴으로 바꿉니다. 이 명령은 X에서 Y까지 일치하는 모든 것을 sed의 버퍼 1에 넣습니다. 패턴에서 "\1"을 바꾸면 버퍼가 인쇄됩니다.

따라서 귀하의 예에서는 다음과 같습니다.

sed 's/.*\(\[.*apal\)/\1/p' < file.txt

그러면 문제가 해결될 것입니다.

답변4

[과 사이의 텍스트만 원한다면 apalPerl이 좋은 선택입니다.

perl -lne '/(?<=\[)(.+?)(?=apal)/ and print $1' file

GNU grep이 설치되어 있는 경우(예: homebrew를 통해) 다음을 수행할 수 있습니다.

grep -Po '(?<=\[).+?(?=apal)' file

관련 정보