入力ファイルは、
test00.dat test07.dat test03.dat
aram22.dat test09.dat aram09.dat
test13.dat
出力ファイルが必要です
test01.dat test08.dat test04.dat
aram22.dat test10.dat aram09.dat
test14.dat
つまり、test
に関連付けられた数値文字列が1ずつ増加します。この操作を実行するには、適切な端末コマンドラインが必要です。
特に、「test09.dat」から「test10.dat」への変換メカニズムを変更する必要があります。
次のPerl
onelinerを使用して、変換を行うことができます。
echo "test00.dat test09.dat aram22.dat" | Perl -pe 's/test\K(\d+)/sprintf "%02d", $1+1/eg'
結果:
test01.dat test10.dat aram22.dat
入力ファイルを使用するには:
$ Perl -pe 's/test\K(\d+)/sprintf "%02d", $1+1/eg' your_file
test01.dat test08.dat test04.dat
aram22.dat test10.dat aram09.dat
test14.dat
数値部分を増やして特定の文字列を見つけて置換する方法 (KasiyAが提案)に基づいたquick'n'dirtyソリューション
echo "test00.dat test07.dat aram22.dat" | Perl -pe 's/(?<=test)(\d+)/$1+1/eg' | sed -e 's/test\([0-9]\)\./test0\1/g'
test01dat test08dat aram22.dat
コマンドにいハックがあることに注意してください。Perlはtest1.datを出力し、sedを使用してtest01.datに修正します。
以下のスクリプトは、単語内の数字がファイル名(例えばfile_123.dat
ではなくfile12something345.dat
)に連続して出現すると仮定し、ファイルの名前はuniqueです。
例:
test999.dat test07.dat test03.dat
aram22.dat test09.dat aram09.dat
test0000013.dat
出力:
test1000.dat test08.dat test04.dat
aram22.dat test10.dat aram09.dat
test0000014.dat
#!/usr/bin/env python3
import sys
file = open(sys.argv[1]).read()
for w in [w for w in file.split() if w.startswith("test")]:
try:
found = "".join([ch for ch in w if ch.isdigit()])
replace = (len(found), str(int(found)+1))
file = file.replace(w, w.replace(found, replace[1].zfill(replace[0])))
except ValueError:
pass
print(file.strip())
add_one.py
として保存します次のコマンドでファイルを引数として実行します。
python3 /path/to/add_one.py '</path/to/file>`
これがbashソリューションです:
#!/bin/bash
if [ ! -f "$1" ]; then
echo "File not found!"
exit
fi
names=$(cat "$1" | sort)
for i in $names; do
filename=${i%.*}
extension=${i##*.}
number=${filename: -2:2}
name=${filename//[0-9]}
fnumber=$(printf "%02d\n" $((${number#0}+1)))
if [[ "$name" == "test" ]]; then
echo "${name}${fnumber}.${extension}"
else
echo "$i"
fi
done