나는 도움이 필요해 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'