데이터/시간 형식의 변수가 있는데 사용자가 변수를 입력하는 파일에서 다음 문자열의 첫 번째 매개변수로 바꾸고 싶습니다.
TO_DATE('07/13/2021 00:30:00' 'MM/DD/YYYY HH24:MI:SS')
'07/13/2021 00:30:00'
내 변수로 바꾸고 싶습니다 .
사용자가 입력한 시작 시간을 받아들이고 이를 변수 "st"에 저장하는 스크립트가 있습니다.
정적 쿼리가 포함된 SQL 파일이 있습니다. TO_DATE('07/13/2021 00:30:00' 을 변수로 바꾸는 데 도움이 필요하면 스크립트가 실행됩니다.
아래 sed 명령을 시도했지만 작동하지 않습니다.
sed -e /(.TO_DATE()[^]( .*)/\1'$st'\2/' /apps/tmp/abc.sql
오류 메시지 받기: 's'에 대한 알 수 없는 옵션 저는 sed를 처음 사용합니다. 나는 sed를 처음 사용한다
누구든지 도와줄 수 있나요?
답변1
sed를 사용하려면 해당 명령이 필요 s///
하지만 대체 텍스트에는 슬래시가 포함되어 있습니다. 명령에 다른 구분 기호를 사용할 수 있습니다 s
. 여기서는 쉼표를 사용하겠습니다.
sed -E "s,(TO_DATE\(')[^']+,\1${timestamp}," file.sql
데모:
$ cat file.sql
select * from table1
where created > TO_DATE('07/13/2021 00:30:00', 'MM/DD/YYYY HH24:MI:SS');
$ timestamp=$(date '+%m/%d/%Y %T')
$ sed -E "s,(TO_DATE\(')[^']+,\1${timestamp}," file.sql
select * from table1
where created > TO_DATE('07/14/2021 10:46:51', 'MM/DD/YYYY HH24:MI:SS');
여기서 핵심은 sed 본문에서 큰따옴표를 사용하여 쉘이 변수를 확장하고 변수에 대해 다른 구분 기호를 선택할 수 있도록 하는 것입니다.s///
설명했듯이 변수의 내용을 철저하게 검증하여작은 바비 테이블