일치하는 발생 번호를 발생 자체의 왼쪽에 배치합니다.

일치하는 발생 번호를 발생 자체의 왼쪽에 배치합니다.

".mp3"라는 표현이 여러 번 나타나는 파일이 있습니다. 첫 번째 항목은 "1.mp3"이고 두 번째 항목은 "2.mp3"이기를 원합니다.

awk '/mp3/NR' 파일처럼 보입니다.

내 파일:

line 1
wget .mp3 url
line 2
wget .mp3

....

아직 결과가 나오지 않았어요

답변1

$ awk -v i=1 '/ \.mp3/ {sub(/ \.mp3/," "i++".mp3",$0)};1' input.txt
line 1
wget 1.mp3 url
line 2
wget 2.mp3

wget URL의 숫자를 0으로 채우려면 awk를 사용하여 sprintf()앞에 0을 사용하여 형식을 지정할 수 있습니다 i. 예를 들어:

$ awk -v i=1 '/ \.mp3/ {sub(/ \.mp3/," "sprintf("%03i",i++)".mp3",$0)};1' input.txt
line 1
wget 001.mp3 url
line 2
wget 002.mp3

( ) 옵션 sprintf()과 결합하여 다운로드한 파일을 0으로 채워진 파일 이름으로 저장하여 올바르게 정렬되도록 할 수도 있습니다(예: 1,10,2,3,.. 대신 01,02,03,...10). .)wget-O--output-document

$ awk -v i=1 '/ \.mp3/ {sub(/ \.mp3/," "i".mp3 -O "sprintf("%03i",i++)".mp3",$0)};1' input.txt
line 1
wget 1.mp3 -O 001.mp3 url
line 2
wget 2.mp3 -O 002.mp3

위의 모든 단일 코드 줄은 표준 출력으로 출력됩니다. 원본 파일을 덮어쓰려면 새 파일로 리디렉션한 다음 mv원본 파일을 덮어씁니다.

awk -v i=1 '/ \.mp3/ {sub(/ \.mp3/," "i++".mp3",$0)};1' orig.txt > new.txt

그 다음에:

mv new.txt orig.txt

orig.txt이는 현재 값으로 지정된 권한으로 생성된 새 파일로 대체됩니다 umask. 또한 새로운 소유자 및/또는 그룹이 있을 수도 있습니다(누가 실행하고 기본 그룹이 무엇인지에 따라 다름). 또한 존재할 수 있는 하드 링크를 깨는 새로운 inode 번호를 갖게 됩니다.

"제자리에서 편집" 옵션(예: sed -i또는 perl -i)이 있는 대부분의 프로그램이 이 작업을 수행합니다. 대부분의 경우 이는 원본 파일 소유자와 동일한 umask를 사용하여 동일한 사용자에 의해 실행되고 파일에 두 개 이상의 하드 링크가 있는 경우가 드물기 때문에 괜찮습니다.

또는

cat new.txt > orig.txt
rm new.txt

orig.txt콘텐츠를 해당 콘텐츠로 덮어쓴 다음 new.txt삭제합니다 new.txt. orig.txt이전과 동일한 inode, 소유자, 그룹 및 권한을 갖게 됩니다.

답변2

이 시도,

i=1;
while [ "$( grep -o ' .mp3' file)" != "" ];
do
 sed -i "0,/ .mp3/ s/ .mp3/ $i.mp3/" file
 i=`expr $i + 1`;
done

관련 정보