sed 's/:.*//' /etc/passwd | sort -r
sed
- это s tream ed itor, который используется для применения команд редактирования текста к потокам текстовых данных. sed
использует регулярные выражения для сопоставления шаблонов в строках текста. Регулярные выражения являются общими для многих команд Unix / Linux, таких как grep, awk, emacs, vi, perl, python и т. Д., Поэтому изучение регулярных выражений улучшит ваши навыки работы со многими различными командами.
Приведенная выше команда sed выполняет функцию s
(подстановка) для каждой строки текста. Основная команда s
работает следующим образом:
`s/regular expression/replacement/`
Регулярное выражение в этой команде sed
:. *
соответствует первому двоеточию в строке, если оно есть, за которым следует 0 или более ( *
) любых других символов (.
) до (подразумеваемого) конца строки. sed
заменяет все, что ему соответствует, ничем и печатает результаты.
Другими словами, эта команда sed удаляет от первого двоеточия до конца строки перед печатью строки.
Quiere que el N
en Var1_X_Var2_Y_Var3_Z_data_N.txt
sea un cero -entero de dos -dígitos.
Suponiendo que todos los archivos afectados coincidan con el patrón*_[0-9].txt
:
for name in *_[0-9].txt; do
stem="${name%.txt}" # remove the ".txt" suffix
num=${stem##*_} # extract the number at the end
newname="${stem%[0-9]}$( printf '%02d.txt' "$num" )" # put it back together
printf 'Would rename "%s" into "%s"\n' "$name" "$newname"
# mv -- "$name" "$newname"
done
${name%.txt}
elimina .txt
del final de $name
, el nombre de archivo original. Esto crea la "raíz", que no es realmente la raíz ya que todavía tiene el número al final. ${stem##*_}
elimina todo hasta el último guión bajo incluido en $stem
. ${stem%[0-9]}
es la raíz sin el número al final (, p.Var1_X_Var2_Y_Var3_Z_data_
). printf '%02d.txt' "$num"
produce un número de dos dígitos -lleno de cero -de $num
, seguido de la cadena .txt
. Dado un directorio con los archivos
Var1_X_Var2_Y_Var3_Z_data_1.txt Var1_X_Var2_Y_Var3_Z_data_23.txt
Var1_X_Var2_Y_Var3_Z_data_10.txt Var1_X_Var2_Y_Var3_Z_data_24.txt
Var1_X_Var2_Y_Var3_Z_data_11.txt Var1_X_Var2_Y_Var3_Z_data_25.txt
Var1_X_Var2_Y_Var3_Z_data_12.txt Var1_X_Var2_Y_Var3_Z_data_26.txt
Var1_X_Var2_Y_Var3_Z_data_13.txt Var1_X_Var2_Y_Var3_Z_data_27.txt
Var1_X_Var2_Y_Var3_Z_data_14.txt Var1_X_Var2_Y_Var3_Z_data_28.txt
Var1_X_Var2_Y_Var3_Z_data_15.txt Var1_X_Var2_Y_Var3_Z_data_29.txt
Var1_X_Var2_Y_Var3_Z_data_16.txt Var1_X_Var2_Y_Var3_Z_data_3.txt
Var1_X_Var2_Y_Var3_Z_data_17.txt Var1_X_Var2_Y_Var3_Z_data_30.txt
Var1_X_Var2_Y_Var3_Z_data_18.txt Var1_X_Var2_Y_Var3_Z_data_4.txt
Var1_X_Var2_Y_Var3_Z_data_19.txt Var1_X_Var2_Y_Var3_Z_data_5.txt
Var1_X_Var2_Y_Var3_Z_data_2.txt Var1_X_Var2_Y_Var3_Z_data_6.txt
Var1_X_Var2_Y_Var3_Z_data_20.txt Var1_X_Var2_Y_Var3_Z_data_7.txt
Var1_X_Var2_Y_Var3_Z_data_21.txt Var1_X_Var2_Y_Var3_Z_data_8.txt
Var1_X_Var2_Y_Var3_Z_data_22.txt Var1_X_Var2_Y_Var3_Z_data_9.txt
.. ese bucle produciría
Would rename "Var1_X_Var2_Y_Var3_Z_data_1.txt" into "Var1_X_Var2_Y_Var3_Z_data_01.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_2.txt" into "Var1_X_Var2_Y_Var3_Z_data_02.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_3.txt" into "Var1_X_Var2_Y_Var3_Z_data_03.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_4.txt" into "Var1_X_Var2_Y_Var3_Z_data_04.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_5.txt" into "Var1_X_Var2_Y_Var3_Z_data_05.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_6.txt" into "Var1_X_Var2_Y_Var3_Z_data_06.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_7.txt" into "Var1_X_Var2_Y_Var3_Z_data_07.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_8.txt" into "Var1_X_Var2_Y_Var3_Z_data_08.txt"
Would rename "Var1_X_Var2_Y_Var3_Z_data_9.txt" into "Var1_X_Var2_Y_Var3_Z_data_09.txt"
Elimine el comentario mv
al final del bucle para cambiar el nombre de los archivos.
find -name "*_[1-9].txt" -exec sh -c 'echo $1 ${1%_*}_0${1##*_}' _ {} \;
$1
está sustituyendo con el archivo encontrado. ${1%_*}
está eliminando todo después de el último guión bajo y el propio guión bajo. _0
solo imprime un guión bajo seguido de un cero. ${1##*_}
elimina todo antes de el último guión bajo y el propio guión bajo. reemplace echo
con mv
para cambiar el nombre de los archivos.
Usé esto para crear 3o archivos
touch Var1_${RANDOM}_Var2_${RANDOM}_Var3_${RANDOM}_data_{1..30}.txt