첫 번째 필드에 숫자가 포함된 행이 있습니다.
46066.874.89
48569.123.56
56489.256.88
654.12.32
84689.25.69
지금 하고 싶은 일은 00
네 번째 줄 끝에 654
파일을 추가하고 첫 번째 줄 앞에 세 번째 숫자를 추가하는 것입니다 .
. 어떻게 해야 하나요? 나는 사용하려고
sed 's/^[0-9][0-9][0-9]./&00/'
하지만 내가 얻는 결과는
4606006.874.89
4856009.123.56
5648009.256.88
654.0012.32
8468009.25.69
답변1
거의 다 왔습니다:
$ sed -E 's/^([0-9][0-9][0-9])\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
답변2
명령 sed
은 세 자리 숫자 뒤에 두 개의 0을 삽입하고 각 줄의 시작 부분에 또 다른 문자를 삽입합니다. "모든 문자" 와 일치합니다 .
. \.
실제 포인트 와 일치시키기 위해 포인트를 이스케이프 처리했는데도 0이 두 개 삽입됩니다.뒤쪽에가리키다.
약간만 조정하면 문제가 해결됩니다.
$ sed 's/^\([0-9]\{3\}\)\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
또는 sed
확장 정규식을 지원하는 경우(요즘 대부분 지원):
$ sed -E 's/^([0-9]{3})\./\100./' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
보다 일반적으로 사용 awk
하고 만드십시오.
$ awk -F . 'BEGIN { OFS=FS } length($1) < 5 { $1 = sprintf("%s%.*d", $1, 5 - length($1), 0) }; 1' file
46066.874.89
48569.123.56
56489.256.88
65400.12.32
84689.25.69
awk
길이가 5자 미만인 첫 번째 점으로 구분된 열의 각 항목에 대해 이 명령은 문자열의 총 길이가 5자가 되도록 문자열을 필요한 개수의 0으로 채웁니다.
이는 정수를 누락된 길이의 0으로 채워진 문자열로 형식화하여 0
수행 됩니다. 그런 다음 해당 필드의 기존 데이터와 결합합니다.
이는 첫 번째 필드의 모든 짧은 문자열(단지 세 문자를 포함하는 문자열이 아님)에 적용됩니다.
문자열의 시작 부분을 0으로 채우는 것이 더 쉽습니다(필수는 아니지만 허용됨).
$ awk -F . 'BEGIN { OFS=FS } { $1 = sprintf("%.5d", $1) }; 1' file
46066.874.89
48569.123.56
56489.256.88
00654.12.32
84689.25.69
우리는 첫 번째 필드에 정수가 포함되어 있다는 사실을 활용하고 이를 sprintf()
올바른 너비의 0으로 채워진 정수로 형식화합니다.
두 명령 모두 1
끝에 있는 명령은 현재 줄을 인쇄하는 기본 작업을 호출합니다( { print }
또는 로 대체 가능 { print $0 }
).