sed(또는 다른 대체 솔루션)를 사용하여 해시 값이 포함된 문자열의 일부를 인쇄하려면 어떻게 해야 합니까?

sed(또는 다른 대체 솔루션)를 사용하여 해시 값이 포함된 문자열의 일부를 인쇄하려면 어떻게 해야 합니까?

sed를 사용하여 한 줄의 특정 문자열을 인쇄하려고 합니다.

첫 번째 문제는 슬래시가 포함된 문자열을 찾는 데 어려움이 있다는 것입니다. 다른 스레드에서 제공하는 솔루션 중 일부를 시도했지만 성공하지 못했습니다. 누군가가 나를 도울 수 있기를 바랍니다.

output.log라는 파일이 있습니다.

라인의 예는 다음과 같습니다:

013-11-08 19:45:52 evtlog.bad PROD/INSE/6004113 2012-11-08 19:04:06 /test11/golf/TierTwo/2013-11/evtlog.log

그래서 sed를 사용하여 이 줄에 대해 다음 문자열을 인쇄하고 싶습니다.

/test11/golf/TierTwo/2013-11/evtlog.log

"golf/TierTwo/2013-11" 줄에서 문자열을 찾고 싶습니다.

예를 들어 다음을 사용합니다.

sed 'golf/TierTwo/2013-11' output.log

출력을 얻습니다.

/test11/golf/TierTwo/2013-11/evtlog.log

이 목표를 어떻게 달성할 수 있나요?

sed 대신 더 나은 솔루션이 있다면 그것도 환영받을 것입니다. 내 목표는 스크립트, bash 또는 perl에서 사용하는 것입니다.

답변1

awksed 대신 사용 :

awk 'index($0,"golf/TierTwo/2013-11")>0 { print $7 }' output.log

그러면 각 줄의 문자열을 검색하고 색인이 발견되면 7번째 단어가 인쇄됩니다.

답변2

또는 플래그를 grep지원 하는 경우 공백이 아닌 연속 문자로 둘러싸인 문자열을 찾을 수 있습니다.-o--only-matching

grep -o '[^[:blank:]]*golf/TierTwo/2013-11[^[:blank:]]*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log

또는 (펄 스타일 \S클래스를 지원하는 경우)

grep -Eo '\S*golf/TierTwo/2013-11\S*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log

답변3

perl -naE 'say $F[6] if m!golf/TierTwo/2013-11!' logfile

perl -naePerl이 awk처럼 행동하게 해주세요...

관련 정보