Как удалить эту строку из файла с помощью sed или perl?

Как удалить эту строку из файла с помощью sed или perl?

Я хочу удалить эту строку:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo 'Пожалуйста, войдите как пользователь \"centos\", а не как пользователь \"root\".';echo;sleep 10"

в файле ниже:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo 'Пожалуйста, войдите как пользователь \"centos\", а не как пользователь \"root\".';echo;sleep 10" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCV9sc7lTrpAJb1UARLmNA08XD8Dy0hGJiX1E5qYk8MkH36xbBtcO6xeuncFr619pu+R/08jkYn9GIXlgPzD9THUpEI+m/OSp5nVPgIamiN7LudOSks6zwk9THkxeSmW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6

решение1

Файл представляет собой authorized_keysфайл для SSH, часто встречающийся в ~/.ssh/authorized_keys. Он имеет ряд полей, и поле, которое вы хотите удалить, является первым необязательным полем «опций».

Второе поле — это поле «keytype», которое будет иметь одно из значений ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519, ssh-dssили ssh-rsa, в соответствии с sshdруководством.

Мы можем использовать этот факт, чтобы удалить поле параметров:

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

Или вы можете использовать sed -i ...для изменения файла на месте, если вы знаете, как это обычно работает в вашем Unix (флаг -iработаетнемногопо-разному в разных реализациях sed).

Команда sedредактирования s/^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))/\1/сопоставит расширенное регулярное выражение ^.* (ecdsa-sha2-(nistp384|nistp521)|ssh-(ed25519|dss|rsa))и заменит совпадающий текст типом ключа, найденным в строке. Выражение соответствует всему, что находится в начале каждой строки ввода, вплоть до одного из допустимых типов ключа включительно.

решение2

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

Вероятно, вам придется экранировать некоторые знаки препинания в your_string.

Связанный контент