これは私が経験している簡単な問題ですが、うまく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を使用するなど、移植性の悪いソリューションなどがたくさんありますrename
。mmv
rename
util-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を使用して質問にタグを付けました。
では、sed
ERE構文を使用します(いくつかのことを避けるために\
):
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
正しく処理されます。一部ヤング。