마지막 공백 이후에 일치하는 패턴을 바꿔야 합니다. 다음과 같은 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
이것은 일치합니다
- "줄의 시작 부분부터 시작하는 모든 것"(
^.*
패턴, "캡처 그룹"에 배치됨( ... )
), - 그러면 공간이 있는데,
- 그러다가 "아무거나하지만
[^ ]
줄 끝까지의 공백( )"(후자는 "하나 이상의 해당 문자"를+
의미하며 "줄의 끝"을 나타내는 기준점임),[...]
$
뒷부분을 대체 텍스트로 바꾸세요. 이전 부분은 캡처링 그룹으로 인해 "self"로 대체됩니다 \1
.
답변2
이 방법은 줄 시작 부분에 공백으로 구분된 두 개의 필드가 있는 경우에 작동합니다. 세 번째 필드가 존재하지 않을 수 있습니다.
awk '{print $1 " " $2 " new text"}' < file
이건 나중에 교체할 예정마지막 공간한 줄에 몇 개의 공백이 있는지에 관계없이:
sed 's/ [^ ]*$/ new text/' < file