저는 grep을 처음 접했고 다음 작업을 수행하는 방법을 알고 싶습니다. 이 형식의 약 1000줄이 포함된 파일이 있습니다.
assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.1 0.8 0.8
assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.4 0.9 0.9
마지막 숫자를 다음과 같이 변경하고 싶습니다.
4.6 2.6 2.6 !
내가 할 수 있는 방법이 있나요? 각 행의 숫자는 서로 다릅니다. 모든 숫자를 일관되게 만들고 각 행 끝에 "!"를 추가하려고 합니다.
미리 감사드립니다!
답변1
grep
일치 항목을 인쇄하고 파일의 데이터를 인쇄하는 데 사용됩니다. 데이터를 교체하려면 다음이 필요합니다 sed
.
sed 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file
4.6 2.6 2.6 !
이렇게 하면 숫자가 무엇이든 개수에 관계없이 각 줄 끝에 있는 모든 숫자가 대체됩니다 .
파일을 그 자리에서 편집하려면:
sed -i 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file
산출:
assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !
assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !
답변2
이번에는 awk
텍스트 처리를 위한 또 다른 솔루션입니다.
awk '{gsub(/([[:digit:]]\.[[:digit:]] ?){3}$/,"4.6 2.6 2.6 !")}1' file
.
이는 (또한) 줄 끝의 삼중 "숫자" ""숫자"(및 가능하면 공백) 패턴을 사용자가 지정한 문자열로 대체합니다.
출력 (다시)
assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !
assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !
사용된 구문은 완전히 이식 가능하지 않습니다. mawk
예를 들어 반복 계산 구성이 이해되지 않으므로 다음을 사용해야 할 수도 있습니다.{number}
awk '{gsub(/[0-9]\.[0-9] [0-9]\.[0-9] [0-9]\.[0-9]$/,"4.6 2.6 2.6 !")}1' file
그러한 구현을 사용하는 경우 awk
.