1 votos

Ayuda necesaria para añadir texto al final de una cadena utilizando el comando "sed" en Terminal

En Terminal.app, he utilizado la función curl ftp ... para obtener un listado de directorios de carpetas y archivos del ordenador de mi amigo y dirigí la salida a un archivo llamado "curlFTP.txt". Cada línea de este archivo aparece como estos 3 ejemplos siguientes...

  • drwxr-xr-x 1 nobody Root 4096 Ago 02 2014 WEDDING_SINGER_4X3
  • drwxr-xr-x 1 nobody Root 4096 Ago 02 2014 WEEKEND_AT_BERNIES
  • drwxr-xr-x 1 nobody Root 4096 Ago 02 2014 WEIRD_SCIENCE

De cada una de estas líneas de ese archivo, sólo necesito mantener los nombres de los directorios, que serían...

  • WEDDING_SINGER_4X3
  • FIN DE SEMANA_EN_BERNIES
  • CIENCIA_EXTRAÑA

Utilizando el cut -c 52- pude extraer sólo estos nombres de carpetas que luego dirigí su salida a un archivo que llamé "curlFTP2.txt"

El siguiente paso que tenía que hacer era anteponer a cada línea del archivo "curlFTP2.txt" el texto... curl ftp://1.1.1.1/Disk\ 1\ Movies/Movies\ 1/ y dirigir su salida a un archivo llamado "curlFTP3.txt". Ahora cada línea del archivo "curlFTP3.txt" se vería como estos tres ejemplos...

curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEDDING_SINGER_4X3
curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEEKEND_AT_BERNIES
curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEIRD_SCIENCE

Aquí está el comando completo que utilicé, que funcionó increíblemente bien y fue extremadamente rápido, teniendo en cuenta que había 760 líneas en el archivo para editar.

cat curlFTP.txt | cut -c 52- > curlFTP2.txt ; sed 's|^|curl ftp://1.1.1.1/Disk\ 1\ Movies/Movies\ 1/|g' curlFTP2.txt > curlFTP3.txt

(la dirección IP que he utilizado en esto es un sustituto de la dirección IP que realmente he utilizado)

Aquí es donde estoy atascado lo que tengo que hacer es utilizar el sed con el comando -e para poder añadir un argumento adicional sed al código de arriba y añadir un "/" al final de cada línea de ese archivo porque cada listado es un directorio.

Necesito que cada línea tenga este aspecto: curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEDDING_SINGER_4X3/ En lugar de que cada línea se vea como: curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/WEDDING_SINGER_4X3

Pude averiguar que usando el sed 's|^|blah|g' por ejemplo, el carácter "^" significaría añadir "blah" al principio de cada línea.

Así que esta es mi pregunta ¿hay algún carácter similar que pueda usar, como el carácter "^", que me permita usar el sed para añadir texto al final de cada línea?

1 votos

Sí, lo es: $

0 votos

Tío, eres el mejor Muchas gracias, hermano.

0 votos

No es necesario cat , | o cut Podrías hacerlo en un solo paso con, por ejemplo,: sed -E -e 's|^.*[A-Za-z]{3}[ ][0-9]{2}[ ][0-9]{4}[ ]|curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/|' -e 's|$|/|' curlFTP.txt > newfile.txt

1voto

user3439894 Puntos 5883

Así que aquí está mi pregunta ¿hay un carácter similar que pueda usar, como el carácter "^", que me permitiría utilizar el comando sed para añadir texto al final de cada línea?

Sí, lo es: $

Dicho esto, viendo lo que está ocurriendo, permítanme ofrecerles una solución global diferente en la que no es necesario lo primero:

cat curlFTP.txt | cut -c 52- > curlFTP2.txt

Puede procesar el curlFTP.txt archivo directa y completamente con sed :

sed -E -e 's|^.*[A-Za-z]{3}[ ][0-9]{2}[ ][0-9]{4}[ ]|curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/|' -e 's|$|/|' curlFTP.txt > newfile.txt

Incluso podría eliminar > newfile.txt utilizando el -i opción de la sed comando :

-i extensión
Editar archivos en el lugar, guardando copias de seguridad con el extensión . Si una longitud cero extensión se da, no se guardará ninguna copia de seguridad guardada. No se recomienda dar una longitud de cero extensión cuando editar archivos en el lugar, ya que se corre el riesgo de corrupción o contenido parcial en situaciones en las que se agota el espacio del disco, etc.

sed -i'.bak' -E -e 's|^.*[A-Za-z]{3}[ ][0-9]{2}[ ][0-9]{4}[ ]|curl ftp://1.1.1.1/Disk 1 Movies/Movies 1/|' -e 's|$|/|' curlFTP.txt

Utilizando https://regex101.com para explicar el regex utilizado en el sed comando :

enter image description here

Que coincide, por ejemplo, con

drwxr-xr-x 1 nobody root 4096 Aug 02 2014

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X