와일드카드를 사용하여 두 패턴 사이에 텍스트를 인쇄하는 방법은 무엇입니까?

와일드카드를 사용하여 두 패턴 사이에 텍스트를 인쇄하는 방법은 무엇입니까?

두 패턴 사이의 텍스트를 캡처해야 하는데 이러한 패턴에 변화하는 숫자가 포함될 수 있습니다. 또한 해당 구조를 가진 문자 시퀀스로 시작하는 줄에만 관심이 있으며 다른 시퀀스나 구조는 무시해야 합니다. 제가 캡쳐하고 싶은 왼쪽의 두 자리 숫자일 수도 있지만, 오른쪽의 숫자는 그대로 유지됩니다

전임자:

ab-cd-1.1.1.11-CAPTURE-11111111.xyz

또는

ab-cd-22.1.11.1-CAPTURE-11111112.xyz

숫자가 변경되지 않을 것이라고 가정하지만 난수를 설명하는 방법을 잘 모르는 경우 다음 명령을 사용하여 필요한 것을 얻을 수 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.

echo "ab-cd-1.1.1.11-CAPTURE-11111111.xyz" | sed "s/.*ab-cd-1.1.1.11-//;s/-.*//"

답변1

awk토큰을 분리하기 위해 using을 사용해 볼 수 있습니다 -.

awk -F\- '{print $4}' input_file

추가 필터를 적용하려는 경우 가능한 접근 방식은 다음과 같습니다.

<exec some filter based on other fields> input_file|awk -F\- '{print $4}'

ab-cd편집한 답변에 따라 문자열이 스크립트로 시작되도록 하려면 다음을 수행하세요.

awk -F\- '$1=="ab" && $2=="cd" {print $4}' input_file

마지막 요청에 따라 스크립트는 다음과 같습니다.

awk -F\- '$1=="ab" && $2=="cd" {split($5,a,"."); if (int(a[1])==a[1] && length(a[1])==8) print $4}' input_file

내 테스트 파일:

cat qq
ab-cd-1.1.1.11-CAPTURE-11111111.xyz
ab-cd-1.1.1.11-CAPTURa-1111111a.xyz
ab-cd-1.1.1.11-CAPTURb-1111111.xyz
ab-cd-1.1.1.11-aAPTURE-a1111112.xyz


awk -F\- '$1=="ab" && $2=="cd" {split($5,a,"."); if (int(a[1])==a[1] && length(a[1])==8) print $4}' qq
CAPTURE

답변2

파내야 할 것이 있을 때마다 grep도구 상자에서 그것을 꺼냅니다.

$ grep -oP '\d+(?:\.\d+)+-\K[^-]+(?=-\d+)' file

관련 정보