¿Cómo eliminar esta cadena de un archivo usando sed o perl?

¿Cómo eliminar esta cadena de un archivo usando sed o perl?

Quiero eliminar esta cadena:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo 'Inicie sesión como usuario \"centos\" en lugar de como usuario \"root\".';echo;sleep 10"

en el siguiente archivo:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo 'Inicie sesión como usuario \"centos\" en lugar de como usuario \"root\".';echo;sleep 10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCV9sc7lTrpAJb1UARLmNA08XD8Dy0hGJiX1E5qYk8MkH36xbBtcO6xeuncFr619pu+R/08jkYn9GIXlgPzD9THUpEI+m/OSp5nVPgIamiN7LudOSks6 zwk9THkxeSmW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6

Respuesta1

El archivo es un authorized_keysarchivo para SSH, que a menudo se encuentra en formato ~/.ssh/authorized_keys. Tiene varios campos y el campo que desea eliminar es el primer campo opcional de "opciones".

El segundo campo es el campo "tipo de clave " , que tendrá uno de los valores ,,,, o ecdsa-sha2-nistp256, según el manual.ecdsa-sha2-nistp384ecdsa-sha2-nistp521ssh-ed25519ssh-dssssh-rsasshd

Podemos utilizar este hecho para eliminar el campo de opciones:

sed -E 's/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/' ~/.ssh/authorized_keys >~/.ssh/authorized_keys.new &&
mv ~/.ssh/authorized_keys.new ~/.ssh/authorized_keys &&
chmod go-rwx ~/.ssh/authorized_keys

O bien, puede utilizar sed -i ...para cambiar el archivo en el lugar si sabe cómo funciona esto normalmente en su Unix (la -ibandera funcionalevementede manera diferente en diferentes implementaciones de sed).

El sedcomando de edición s/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/coincidirá con la expresión regular extendida ^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))y reemplazará el texto coincidente con el tipo de clave que se encuentra en la línea. La expresión coincide con cualquier cosa, desde el principio de cada línea de entrada hasta uno de los tipos de clave válidos, inclusive.

Respuesta2

sed -i 's/your_string//g' filename

Probablemente necesitarás omitir algunos signos de puntuación en tu_cadena.

información relacionada