"["로 시작하고 일부 문자열(예: "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
[
과 사이의 텍스트만 원한다면 apal
Perl이 좋은 선택입니다.
perl -lne '/(?<=\[)(.+?)(?=apal)/ and print $1' file
GNU grep이 설치되어 있는 경우(예: homebrew를 통해) 다음을 수행할 수 있습니다.
grep -Po '(?<=\[).+?(?=apal)' file