2016-08-15 5 views
-1

누구나 파일 내의 문자열에 0을 추가 할 수 있습니까?파일에서 문자열을 찾고 문자 또는 숫자를 추가하여 유닉스 쉘 스크립트를 만듭니다.

예 : I는 TEST.DAT 있고 그와 같은 아래에 포함

1 이름 성 2,015,042,113 : 00 : 00000285000FSCRD INV 0 2 이름 성 B 2,015,042,220 : 00 : 00000331000SSESA INV 0

그리고 문자열의 중간에 세 개의 (0)을 삽입하여 fie의 문자열 중 하나를 편집하는 쉘 스크립트를 만들고 싶습니다.

예상되는 출력은 다음과 같습니다. 추가 된 세 개의 0을 아래와 같이 굵게 표시합니다.

01 이름 성 2015042113 : 00 : 00 000 000285000FSCRD INV 0

02 이름 성 B 2015042220 : 00 : PM 000 000331000SSESA INV 0

+0

[편집 - 도움말] (http://stackoverflow.com/editing-help)을 살펴보십시오. – Cyrus

+0

0을 추가 할 곳을 _define_ 할 수 있습니까? –

+0

이것을 탭으로 구분하고, 다섯 번째 필드가 처음에 고정 길이 날짜 스탬프를 포함한다고 가정하면 'awk -F'\ t "($ 5 = substr ($ 5, 1, 17)"000 "substr , 18)} 1 '파일'은 당신이 요구하는 것을 할 것입니다. – tripleee

답변

0
sed "s/\(+[0-9]\{10\}:[0-9]\{2\}:[A-Z0-9]\{2\}\)\([A-Z0-9]\{16\}\)/\1000\2/" 

에이 sed 명령을 3 0을 추가 전체 다섯 번째 필드와 일치하고 세 개의 0을 삽입하는 것입니다. 이는 라인의 다른 부분을 대체하지 못하도록 (더 짧은 regex과 비교하여) 더 강력합니다.

다섯 번째 필드의 사양이있는 경우 regex을 더 강하게 만들 수 있습니다.

+0

예 더 잘 작동합니다! 감사합니다 edi38 – Neo

0

당신은 사용할 수 있습니다;

awk -F : '{print $1":"$2":"substr($3,1,2)"000"substr($3,3)}' test.dat 

또는

sed -r -e 's/^.*:../&000/' test.dat 
+0

@M Dogru - 이름에 'John Adam'과 같은 두 개의 이름이 있고 파일이 탭으로 구분되어 있지만 공백이 아닌 경우 $ 5가 문제가됩니다. 어떤 생각? 귀하의 회신에 감사드립니다. 이 패턴 매칭은 정말 어렵습니다. – Neo

+0

@ 네오 : FS를 다음과 같이 변경했습니다. 아마도이 방법이 도움이 될 수 있습니다. –

+0

M. Dogru - 잘될 것 같습니다. 나는 불법적 인 조작을했다. 내 솔라리스에서 일부 bin -r을 호출하여 쉘을 업데이트해야합니다. – Neo

1

당신은 sedregex로 사용할 수 있습니다 :

sed 's/\(:..:..\)/\1000/' test.dat 

그것이 대장 "를 찾을 수 있도록 점은, 어떤 문자 (패턴 :..:..을 찾습니다, 모든 문자, 임의의 문자, 대장, 어떤 문자, 어떤 문자 ")과