我需要替换最后一个空格之后的任何匹配模式。我有一个 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
.我想找到它并用另一个字符串替换。
如何找到并替换从最后一个空格开始的所有内容?与sed
或awk
或其他任何东西...
提前致谢。
答案1
你可以尝试
sed -E 's/(^.*) [^ ]+$/\1 replacement_text/' file.txt
这将匹配
- “从行开头开始的任何内容”(
^.*
模式,放置在“捕获组”中( ... )
), - 然后是一个空格,
- 然后“任何事但一个空格(
[^ ]
)到行尾”(后面+
的[...]
意思是“一个或多个这样的字符”,$
是一个锚点,表示“行尾”),
并将后一部分替换为您的替换文本。由于捕获组,前一部分被“自身”替换\1
。
答案2
当行开头有两个空格分隔的字段时,此方法有效。第三个字段可以不存在。
awk '{print $1 " " $2 " new text"}' < file
这将在之后替换最后一个空格无论行中有多少个空格:
sed 's/ [^ ]*$/ new text/' < file