Bashからファイル名の途中で先行ゼロを削除します。

Bashからファイル名の途中で先行ゼロを削除します。

これは私が経験している簡単な問題ですが、うまくsed対処できません。

結果splitとして、すべての1桁の数字ブロックには前に0が付きますBRNSPC_varID_chunk_07.txt。下線の後の先行ゼロを削除して、次のように見せたいと思いますBRNSPC_varID_chunk_7.txt。次のゼロに影響を与えたくありません(つまり、BRNSPC_varID_chunk_70.txt維持したいBRNSPC_varID_chunk_70.txt)。誰かがこれらすべてのファイルの名前をすばやく変更するのに役立ちますか? Rで処理する方法がわからないRスクリプトでエラーが発生します。

そしてそのファイルの一つはBRNSPC_varID_chunk_00.txt…それが終わったらいいですBRNSPC_varID_chunk_0.txt

ありがとう

答え1

与えられた

$ touch BRNSPC_varID_chunk_07.txt BRNSPC_varID_chunk_00.txt BRNSPC_varID_chunk_70.txt

bashもしそうなら、少なくともksh、、、zsh

$ for f in ./*chunk_0?.txt; do echo mv "$f" "${f/chunk_0/chunk_}"; done
mv ./BRNSPC_varID_chunk_00.txt ./BRNSPC_varID_chunk_0.txt
mv ./BRNSPC_varID_chunk_07.txt ./BRNSPC_varID_chunk_7.txt

echoそれが正しいことをすることを確信したら、取り除きなさい。

chunkあいまいさがない場合(つまり、_0名前の他の場所にシーケンスが表示されない場合)、プレフィックスを削除できます。

fromを使用するなど、移植性の悪いソリューションなどがたくさんありますrenamemmvrenameutil-linux

rename.ul -n -v chunk_0 chunk_ ./*chunk_0?.txt

-n実際に名前を変更するには削除してください)。

答え2

使用rename:

rename 's/(BRNSPC_varID_chunk_)0([0-9])/$1$2/' *.txt

*.txt.txt現在のディレクトリ内のすべてのファイルに展開されます。

BRNSPC_varID_chunk_0[0-9]名前変更は、最初の一致グループがある場所BRNSPC_varID_chunk_と2番目の一致グループが続く場所を含むすべてのファイルを見つけ、最初と2番目の一致グループ[0-9]にのみ変更します(間のゼロは削除)。

答え3

置換する文字列に一致する正しい正規表現を選択することが重要です。

sedを使用して質問にタグを付けました。

では、sedERE構文を使用します(いくつかのことを避けるために\):

s#(chunk_)0+([0-9]+\.)#\1\2#

これにより、テキストが変わりchunk_(最初の逆参照でキャプチャされます\1)、その後にランダムな数字(最小1つ)の(先行)0、ランダムな0+数字(最小1つ)、ドットが続き、\.次のように変換されます。逆参照\1\2(いくつかの先行ゼロ除去)。

古いが移植性の高い構文を使用すると、次のようになります。

s#\(chunk_\)0\{1,\}\([0-9]\{1,\}\.\)#\1\2#

これにより、以下が変換されます。

for file in ./BRNSPC_varID_chunk*.txt; do
    filenew=$(echo "$file" | sed -E 's#(chunk_)0+([0-9]+\.)#\1\2#')
    echo mv -n "$file" "$filenew"
done

sedを使用することは、正規表現をサポートしていないシェルでのみ意味があります。

Bashでは、次のことができます。

regex='(.*chunk_)0+([0-9]+\..*)'

for file in ./BRNSPC_varID_chunk*.txt; do
    if [[ $file =~ $regex ]]; then
        filenew=$(IFS=;printf '%s' "${BASH_REMATCH[@]:1}") 
        echo mv -n "$file" "$filenew"
    fi
done

これにより、次の種類のリストが印刷されます。

mv -n ./BRNSPC_varID_chunk_000000.txt ./BRNSPC_varID_chunk_0.txt
mv -n ./BRNSPC_varID_chunk_0000.txt   ./BRNSPC_varID_chunk_0.txt
mv -n ./BRNSPC_varID_chunk_00011.txt  ./BRNSPC_varID_chunk_11.txt
mv -n ./BRNSPC_varID_chunk_000.txt    ./BRNSPC_varID_chunk_0.txt
mv -n ./BRNSPC_varID_chunk_00.txt     ./BRNSPC_varID_chunk_0.txt
mv -n ./BRNSPC_varID_chunk_010.txt    ./BRNSPC_varID_chunk_10.txt
mv -n ./BRNSPC_varID_chunk_011.txt    ./BRNSPC_varID_chunk_11.txt
mv -n ./BRNSPC_varID_chunk_012.txt    ./BRNSPC_varID_chunk_12.txt
mv -n ./BRNSPC_varID_chunk_013.txt    ./BRNSPC_varID_chunk_13.txt
mv -n ./BRNSPC_varID_chunk_014.txt    ./BRNSPC_varID_chunk_14.txt
mv -n ./BRNSPC_varID_chunk_015.txt    ./BRNSPC_varID_chunk_15.txt
mv -n ./BRNSPC_varID_chunk_01.txt     ./BRNSPC_varID_chunk_1.txt
mv -n ./BRNSPC_varID_chunk_02.txt     ./BRNSPC_varID_chunk_2.txt
mv -n ./BRNSPC_varID_chunk_03.txt     ./BRNSPC_varID_chunk_3.txt
mv -n ./BRNSPC_varID_chunk_04.txt     ./BRNSPC_varID_chunk_4.txt
mv -n ./BRNSPC_varID_chunk_05.txt     ./BRNSPC_varID_chunk_5.txt
mv -n ./BRNSPC_varID_chunk_06.txt     ./BRNSPC_varID_chunk_6.txt
mv -n ./BRNSPC_varID_chunk_07.txt     ./BRNSPC_varID_chunk_7.txt
mv -n ./BRNSPC_varID_chunk_08.txt     ./BRNSPC_varID_chunk_8.txt
mv -n ./BRNSPC_varID_chunk_09.txt     ./BRNSPC_varID_chunk_9.txt
mv -n ./BRNSPC_varID_chunk_0.txt      ./BRNSPC_varID_chunk_0.txt

正しく処理されます。一部ヤング。

関連情報