查找并替换最后一个空格后的模式

查找并替换最后一个空格后的模式

我需要替换最后一个空格之后的任何匹配模式。我有一个 ssh 证书文件,例如:

[email protected] AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgePsBdieYnkI6dvMLG5qAl+UnOXo8mV0JmthWTNZ7+REAAAADAQABAAABAQC0aFhFni8pfoRiwt5O1ZVU6G0Xb+iX3D+A7uEItzLAygf7V/Se6tUg3SlUWf85G4S5vceZzbzTXbNso+vCaYc+RA0xwaxDBDHomdJVzpK/TUL+lV63V51vhvaM2redU+fYDGuUHUbVjt0Y4qaHBr6R4Rh0GujbL6U+/eq1yQ52VGD34f1eldt56xvykP1HAfs158oDcCL1lnJ26SPMzN38X6RCl/vAZn8UmOntmpa2LVT+j8kf1lKAQdpGYGbwZybo8LCYL2lyv3LTw1slULZsoKnazuZOKoaTxEziJfvr79jS9sNctqxBMPkeTDxUuLdd3URpiCCfpRcmKH+owAz3AAAAAAAAAAAAAAACAAAAGHZtdHN0aWlxMS5jZWRlbGdyb3VwLmNvbQAAACkAAAAYdm10c3RpaXExLmNlZGVsZ3JvdXAuY29tAAAACXZtdHN0aWlxMQAAAABfaeD6AAAAAGFxvY= ssh_host_rsa_key.pub

在这里,在文件的末尾我有ssh_host_rsa_key.pub或者它可以是不同的东西,比如/home/user/ssh_host_rsa_key.pub.我想找到它并用另一个字符串替换。

如何找到并替换从最后一个空格开始的所有内容?与sedawk或其他任何东西...

提前致谢。

答案1

你可以尝试

sed -E 's/(^.*) [^ ]+$/\1 replacement_text/' file.txt

这将匹配

  • “从行开头开始的任何内容”(^.*模式,放置在“捕获组”中( ... )),
  • 然后是一个空格,
  • 然后“任何事一个空格([^ ])到行尾”(后面+[...]意思是“一个或多个这样的字符”,$是一个锚点,表示“行尾”),

并将后一部分替换为您的替换文本。由于捕获组,前一部分被“自身”替换\1

答案2

当行开头有两个空格分隔的字段时,此方法有效。第三个字段可以不存在。

awk '{print $1 " " $2 " new text"}' < file

这将在之后替换最后一个空格无论行中有多少个空格:

sed 's/ [^ ]*$/ new text/' < file

相关内容