sed 명령에서 변수를 호출하는 방법

sed 명령에서 변수를 호출하는 방법

지난 1시간 동안의 레코드 수를 가져오고 싶습니다.

내 코드는 다음과 같습니다

nowdate=$(date +'%H:%M:')
pastdate=$(date +'%H:%M:' -d "1 hour ago")

echo $nowdate
echo $pastdate

sed -rne '/"'"$pastdate"'"/,/"'"$nowdate"'"/p' /data/recvdmsg.log | wc -l

내가 얻는 결과는,

12:47:
11:47:
0

또한 이는 다음과 같이 미리 정의된 값에 대해 잘 작동합니다.

sed -rne '/00:00:/,/00:59:/p' /data/recvdmsg.log | wc -l

sed 명령에서 내 변수를 호출하고 싶습니다 $nowdate.$pastdate

답변1

성명서에 너무 많은 내용을 인용하셨습니다. 다음과 같이 잘 작동합니다:

sed -rne "/$pastdate/,/$nowdate/p" /data/recvdmsg.log | wc -l

또는 여전히 작은따옴표를 사용하고 싶다면 다음과 같이 할 수 있습니다.

sed -rne '/'$pastdate'/,/'$nowdate'/p' /data/recvdmsg.log | wc -l

/변수에 문자가 있으면 sed표현식이 중단된다는 점을 기억하세요 .


이러한 레코드를 추가로 필터링하려면 끝에 grep을 추가하는 대신 Sed에서 이 작업을 수행할 수 있습니다.

sed -rne "/$pastdate/,/$nowdate/ { /pattern-to-grep-for/p; }" /data/recvdmsg.log

(공백은 읽기 쉽게 하기 위한 것으로 필수는 아닙니다.)

답변2

이것은 구체적인 답변이 아닌 일반적인 의견이지만 OP가 확장 프로그램에서 문제가 되는 근본적인 문제를 해결하는 데 도움이 될 수 있기 때문에 답변으로 게시합니다.

확장에 의존하는 인수를 작성하고 확장된 인수가 어떤 모습일지 궁금하다면 여기로 가세요 echo.

출력을 보면

echo '/"'"$pastdate"'"/,/"'"$nowdate"'"/p'
/"12:36:"/,/"13:36:"/p

그러면 인용문에 문제가 있다는 것을 알 수 있습니다.

관련 정보