".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