문자열 끝에서 다른 문자열로 숫자 복사

문자열 끝에서 다른 문자열로 숫자 복사

문자열의 한쪽 끝에서 문자열의 다른 쪽 끝으로 숫자를 복사하는 방법은 무엇입니까? 예를 들어,

입력 -

Example123:Hello
Exp12:Hey1
Exp:heylo

예상 출력 -

Example123:Hello123
Exp12:Hey112
Exp:heylo

sed 또는 awk를 사용할 의향이 있습니다. 구분 기호를 고려해야 하므로 row1은 숫자가 추출되는 행이고 행 2는 숫자가 배치되는 행입니다.

답변1

:각 입력 줄이 한 번만 발생한다고 가정하면 다음을 수행할 수 있습니다.

sed 's/\([[:digit:]]*\):.*/&\1/' < input

두 개 이상이 있을 수 있고 :두 번째 필드가 아닌 줄 끝에 숫자를 추가하려는 경우 다음과 같이 더 복잡해집니다.

sed 's/^\([^:]*[^:[:digit:]]\)\{0,1\}\([[:digit:]]*\):.*/&\2/' < input

답변2

여기에서 awk를 사용할 수 있습니다.

awk -F':' '{ j=$1; gsub(/[^0-9]+/,"",j); print $0 j }' 

설명하다

-F':': awk에게 콜론을 필드 구분 기호로 사용하도록 지시합니다.

j=$1; gsub(/[^0-9]+/,"",j): 첫 번째 열을 임시 변수에 할당 j하고 숫자가 아닌 모든 항목을 제거합니다.j

print $0 jj:마지막으로 원래 문자열을 숫자와 함께 인쇄합니다.

답변3

GNU awk의 기능을 사용하여 match()일치하는 그룹을 배열에 저장하면 다음을 수행할 수 있습니다.

awk -F: -v OFS=: 'match($1, /([0-9]+)$/ , arr) { $2 = $2 arr[1] } 1' file

POSIX 호환에서는 awk다음을 수행할 수 있습니다.

awk -F: -v OFS=: 'match($1, /[[:digit:]]+$/) { $2 = $2 substr($0, RSTART, RLENGTH) }; 1' file

바라보다awk를 사용하여 파일을 영구적으로 변경하는 방법은 무엇입니까? ("내부" 편집, "sed -i"와 동일)파일 변경 사항을 지속적으로 유지합니다.

답변4

Bash에서는 최대한 짧게... 제 생각엔...

sed 's/\([0-9]\+:\).*/&\1/' < input

(@Stèphane의 이전 답변의 도움을 받아)

관련 정보