sed를 사용하여 두 문자 사이의 문자열을 추출하는 방법 [duplicate]

sed를 사용하여 두 문자 사이의 문자열을 추출하는 방법 [duplicate]

나는 도움이 필요해 sed. 이를 위해 정보를 찾아보았지만 구체적인 내용을 찾을 수 없었고, 제공된 솔루션에 대한 설명도 거의 제공되지 않아 sed어떻게 작동하는지 이해하기 어려웠습니다.

기본적으로 다음 형식의 파일이 있습니다.

NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml

00004574첫 번째 밑줄과 두 번째 밑줄 사이의 문자열인 첫 번째 숫자(예: )를 복사하고 싶습니다 .

이 작업을 수행하는 방법을 아시나요?

첫 번째 숫자를 고려하면 0이를 제거하기 위해 무엇을 할 수 있습니까?

두 가지 상황에 대한 예를 들어 주시면 감사하겠습니다. 설명도 환영합니다.

나는 반대 목표를 달성했습니다. 첫 번째 밑줄과 두 번째 밑줄 사이의 문자를 제거했지만 sed s/_[^_]*_/_/실제로 필요한 작업을 수행하는 방법을 알 수 없습니다.

답변1

 awk -F "_" '{print $2}'

그게 다야!

또한 정말로 sed를 사용하고 싶다면

sed 's/^[^_]*_\([^_]*\)_.*/\1/g'

sed에는 탐욕스럽지 않은 일치 항목이 없으므로 _첫 번째 밑줄과 두 번째 밑줄 사이에 있지 않은 항목을 검색해야 합니다!

답변2

다음 형식의 파일이 있고 NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml밑줄 사이의 첫 번째 숫자를 복사(추출?)하고 싶다고 썼습니다.

섹션이 밑줄로 명확하게 구분되어 있으므로 다음과 같이 사용할 수 있습니다.

echo NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml | cut -d_ -f2

이 명령은 밑줄을 지정된 구분 기호( )로 사용하여 cut필드 2( )를 추출합니다.-f2-d_

답변3

원하는 명령은 다음과 같습니다.

sed -ne 's/^[^0-9_][^_]*_0*\([0-9]*\)_.*/\1/p'

앞에 0을 표시하려면 0*을 제거하세요.

답변4

다른sed

sed '/\n/!{s/_0*/\n/g;D;};P;d'

또는

sed 's/_0*/\n/;/^[0-9]/!D;P;d'

관련 정보