sed를 사용하여 숫자를 대괄호로 바꾸는 방법은 무엇입니까?

sed를 사용하여 숫자를 대괄호로 바꾸는 방법은 무엇입니까?

다음과 같은 많은 줄이 포함된 test.txt 파일이 있습니다.

hello:123: world
hello:783: world
hello:479: world
......

sed명령을 사용하여 다음 줄을 바꾸는 방법은 무엇입니까 ?

hello:(123, 0): world
hello:(783, 0): world
hello:(479, 0): world
......

미리 감사드립니다!

답변1

이것에 대해 어떻게 생각하세요? 이것이 당신에게 필요한 것이기를 바랍니다.

sed -e 's/\([0-9]\+\)/(\1, 0)/g'

시험

echo "hello:123: world
hello:783: world
hello:479: world" | sed -e 's/\([0-9]\+\)/(\1, 0)/g'

결과

안녕하세요: (123, 0): 세계

안녕하세요: (783, 0): 세계

안녕하세요: (479, 0): 세계

답변2

POSIX적으로:

sed 's/[0-9]\{1,\}/(&, 0)/' < file

\{1,\}각 줄에서 하나 이상의 ( ) 십진수 시퀀스의 첫 번째 항목을 (&, 0)( &대체할 텍스트의 위치)로 바꿉니다.

sed일부 구현에서는 대안을 사용할 수 있는 경우 -E기본 정규 표현식(BRE) 대신 확장 정규 표현식(ERE)을 사용하도록 선택할 수 있습니다. POSIX 사양의 다음 버전으로 만들 수 있습니다.+\{1,\}-E

sed -E 's/[0-9]+/(&, 0)/' < file

일부 sed구현(예: GNU)은 BRE를 별칭으로 sed지원 하지만 이는 이식 가능/표준은 아닙니다.\+\{1,\}

정규식의 새로운 사실상 표준이 되고 있는 Perl 정규식을 사용하려면 다음을 사용할 수 있습니다 perl.

perl -pe 's/\d+/($&, 0)/' < file

답변3

입력에 :구분된 텍스트가 있고 두 번째 열을 변경해야 한다고 가정합니다.

$ awk 'BEGIN{ FS=OFS=":" } {$2 = "("$2", 0)"} 1' ip.txt
hello:(123, 0): world
hello:(783, 0): world
hello:(479, 0): world

아니면perl

$ perl -F: -lane '$F[1] = "($F[1], 0)"; print join ":",@F' ip.txt
hello:(123, 0): world
hello:(783, 0): world
hello:(479, 0): world

관련 정보