如何使用 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/08jkYn996xbBtcO6xeuncFr619pu+R/08jkYn9GIXNTHm mW95KNEHW5h8Y8MoB0wXzGdr0yiV32nLmvyG18JU6

答案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 中的一些標點符號。

相關內容