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
awk
sed 대신 사용 :
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 -nae
Perl이 awk처럼 행동하게 해주세요...