sed 또는 grep을 사용하여 두 패턴 사이의 문자열을 잡는 방법이 있습니까?

sed 또는 grep을 사용하여 두 패턴 사이의 문자열을 잡는 방법이 있습니까?

로그 파일의 각 줄에 대해 두 패턴 사이의 문자열을 추출하려고 합니다.

예를 들어

some_string: stuff_i_am_interested_in some_other_string
some_string: stuff_i_am_interested_in some_other_string
some_string: stuff_i_am_interested_in some_other_string
some_string: stuff_i_am_interested_in some_other_string

그것을 얻을 수 있는 방법이 있나요 stuff_i_am_interested_in?

답변1

$ cut -d' ' -f2 file
stuff_i_am_interested_in
stuff_i_am_interested_in
stuff_i_am_interested_in
stuff_i_am_interested_in

이것이 필요한 전부가 아닌 경우 질문을 편집하여 요구 사항을 명확히 하고 보다 대표적인 입력/출력 예제를 제공하십시오.

답변2

그리고 grep:

grep -Po 'some_string: \K.*(?= some_other_string)' file
grep -Po '(?<=some_string: ).*(?= some_other_string)' file

그리고 sed:

sed -n 's/some_string: \(.*\) some_other_string/\1/p' file

줄의 some_string시작이나 끝이 아닌 경우 다음을 수행할 수 있습니다.some_other_string

sed -n 's/.*some_string: \(.*\) some_other_string.*/\1/p' file

답변3

sed를 사용하여 이 작업을 수행할 수 있습니다.

cat logfile | sed -n -e 's/some_string: //p' | sed -n -e 's/ some_other_string//p'

관련 정보