「.mp3」という表現が複数回出現するファイルがあります。最初のアイテムは「1.mp3」で、2番目のアイテムは「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()
と組み合わせて、ダウンロードしたファイルをゼロで埋められたファイル名で保存して正しくソートすることもできます(例: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