2017-01-18 2 views
1

제 Unix AIX에서 PowerCenter에서 게시 세션을 실행할 셸 스크립트를 사용하여 매개 변수 파일의 날짜를 시스템 날짜로 바꿔야합니다.매개 변수 파일의 날짜를 시스템 날짜로 바꿉니다.

SED를 사용하여 문자열 변수를 대체 할 수 있지만 날짜를 사용하여 문제가 발생했습니다.

구분 기호로 쉼표 대신 쉼표를 사용하려고했습니다. 테스트 파일의 내용은 다음과 같습니다 : 나는 일을한다고 생각

$$TESTFIELD=12/29/2016 14:57:51 

나오지도 명령했다 :

sed -e "s,^\($$TESTFIELD=\).*,\1'date +"%D %T"'," testfile.txt > tmp.$$ 

후 나는 tmp.$$testfile.txt로 이동 것이지만 결과는 다음과 같은 오류가 발생했습니다 :

sed: 0602-404 Function s,^\(14680298TESTFIELD=\).*,\1'date +%D cannot be parsed. 
+0

큰 따옴표를 사용하고 있으므로'sed -e "s ..."는'$$ TESTFIELD'을 값으로 확장합니다. – fedorqui

+0

'sed에서 날짜 형식을 바꾸는 법 '(http://stackoverflow.com/a/34080390/1983854)을 보시고'sed'에서 외부 명령을 실행하는 방법을보실 수 있습니다. 기본적으로'-e' 플래그를 사용할 필요가 있습니다. – fedorqui

+0

아마도 :'Now = $ (date + "% D % T"); $$'$$' –

답변

2

당신은 sed 명령에 $을 작은 따옴표를 사용하거나 탈출해야합니다. 그렇지 않으면 셸은 $TESTFIELD을 확장합니다. 이 경우 첫 번째를 권합니다.

sed -e 's,^\($$TESTFIELD=\).*,\1'\''date +"%D %T"'\'',' 

질문이 명확하지 않습니다. 현재 날짜로 파일의 날짜를 바꾸려면, 사용

sed -e 's,^\($$TESTFIELD=\).*,\1'"$(date +"%D %T")"',' 
+0

이 접근법은 현재 날짜/시간을 삽입하지 않지만 dat + "% D % T"를 실제로 삽입합니다 : $$ TESTFIELD = '날짜 +'% D % T " ' –

+0

질문을 읽는 것 같습니다. – hek2mgl

+0

내 업데이트를 확인하십시오. – hek2mgl

0
sed -e 's,^\($$TESTFIELD=\).*,\1'"$(date +"%D %T")"',' 

이 완벽했다. 결과 : $$ TESTFIELD = 01/18/17 13:14:59