如何使用 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/OSp5nVPgIamiN7LudOSks6zwk 9THkxeSmW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6

答案1

该文件是authorized_keysSSH 文件,通常在~/.ssh/authorized_keys.它有许多字段,您要删除的字段是第一个可选的“选项”字段。

第二个字段是“keytype”字段,根据手册,该字段的值为ecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521、或 之一。ssh-ed25519ssh-dssssh-rsasshd

我们可以利用这个事实来删除选项字段:

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 中的一些标点符号。

相关内容