Aquí hay una forma de manejar su problema particular:
find. -maxdepth 1 -type f -name "profiles*.csv" ! -name "profiles00.csv" -exec sed -i -e '1!b' -e 'R profiles00.csv' -e 'N' {} +
Escrito presentado en forma de -líneas múltiples como:
find. -maxdepth 1 \
-type f \
-name "profiles*.csv" ! -name "profiles00.csv" \
-exec sed -i -e '1!b' \
-e 'R profiles00.csv' \
-e 'N' \
{} +
para ser leído como:encontrar utilidad deberá
-maxdepth 1
=> caminar solo en el directorio actual, normalmente recurre hasta la jerarquía más baja.
-type f
=> mientras camina, seleccione solo los archivos regulares.
-name "profiles*.csv" ! -name "profiles00.csv"
=> de todos los archivos regulares, seleccione solo aquellos que tienen perfiles *.csv como sus nombres base Y filtre el archivo "profiles00.csv" ya que este es el archivo de encabezado.
-exec sed -i -e '1!b' -e 'R profiles00.csv' -e 'N' {} +
-i
opción => editar archivos en lugar GNU sed asumido
-e
opción => sigue el código sed
1!b
=> no toques las primeras líneas que no sean -.
R profiles00.csv
=> leer una línea (ya que es la primera vez, será la primera línea )del archivo profiles00.csv. Entonces, esencialmente, el encabezado se extrae del archivo profiles00.csv. Pero no impreso todavía.
N
=> Lea la siguiente línea en el espacio del patrón. esto vacía el búfer de lectura y después de eso, el espacio del patrón real se vacía (líneas 1,2 )del archivo actual que está siendo operado por sed.
{} +
hará que encuentre proporcione los múltiples archivos que ha seleccionado de una sola vez a la utilidad sed
y GNU sed es capaz de manejar múltiples archivos con la opción -i
. Específicamente, los números de línea se restablecen para la lectura de un nuevo archivo.
≠================ Vía positiva ======
LC_ALL=C \
find. ! -name. -prune -type f \
-name 'profiles??*.csv' \
! -name 'profiles*[!0-9]*.csv' \
! -name 'profiles00.csv' \
-exec sh -c '
shift "$1"
head -n 1 < profiles00.csv > header
for arg do
printf "0r header\\nw\\nq\\n" | ed -s "$arg"
done
' 2 1 {} +
Aquí prescindimos de sed y recurrimos al ed.
Похоже, мой /bin/csh
на самом деле tcsh
, и даже когда он вызывается как /bin/csh
, он думает, что должен читаться как .tcshrc
(, что сбивает меня с толку :, если я позвоню csh
, я ожидаю получить csh
неtcsh
).
Удаление .tcshrc
заставило его уважать .cshrc
(, но не.login
).