Скопируйте первую строку из одного файла в другие файлы с помощью xargs и sed

Поразмыслив, я думаю, что вы подходите к этому неверно.

w3m используется для отображения HTML-сообщений в Mutt; но это не означает, что вы легко сможете открывать ссылки в обработанном HTML (например, перемещение курсора на ссылку возможно только с помощью мыши).

Вместо этого вы можете использовать сценарий Perl, например extracturl 1 , или, если ваш терминал его поддерживает, что-то вроде urxvt-perls .

1. Ссылка на пакет AUR. Апстрим здесь: https://code.google.com/p/extracturl/

0
17.05.2018, 04:55
3 ответа

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' {} +

  • -iopción => editar archivos en lugar GNU sed asumido

  • -eopció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 sedy 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.

  • 0r => insertará el contenido del archivo mencionado, al principio del archivo editado por ed.
  • w => escribirá en el archivo, congelando así todos los cambios realizados.
  • q => saldrá del editor de edición.
2
28.01.2020, 02:23

Este es un bosquejo de código pseudo -no probado, por lo que puede que no funcione, pero lo haría algo como (primero haga una copia de seguridad de sus archivos para que no los sobrescriba):

sed -i '1s/^/'`head -n1 profiles00.csv`'/' *.csv

explicado

Para obtener más información sobre la inserción en archivos:

https://stackoverflow.com/questions/9533679/how-to-insert-a-text-at-the-beginning-of-a-file

0
28.01.2020, 02:23

No necesitas xargs

Comando:

find. -maxdepth 1 ! -name "profiles00.csv" -a -name "*csv" -exec sed -i "1s/^/$(head -1 profiles00.csv)\n/" {} \;

Aquí estoy usando findpara seleccionar archivos y sedpara editar en el lugar

Explicación

find

  • maxdepth 1-para seleccionar solo archivos en el directorio inmediato y no en el subdirectorio, si también desea editar archivos en el subdirectorio, puede eliminar esta opción
  • ! -name "profiles00.csv" -a -name "*csv"-para seleccionar todos los archivos csv pero no los perfiles00.csv, aquí -asignifica y y !significa no

sed

  • -i-editar archivos en su lugar
  • 1-direccionamiento de línea
  • s/^/$(head -1 profiles00.csv)\n/-para reemplazar el comienzo del archivo con el texto dado

head

  • -1-para seleccionar la primera línea
1
28.01.2020, 02:23

Теги

Похожие вопросы