![Как удалить эту строку из файла с помощью sed или perl?](https://rvso.com/image/109245/%D0%9A%D0%B0%D0%BA%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D1%8D%D1%82%D1%83%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%B8%D0%B7%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20sed%20%D0%B8%D0%BB%D0%B8%20perl%3F.png)
Я хочу удалить эту строку:
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.