2017-10-21 2 views
0

변수에서 이스케이프 문자 때문에 Sed가 일찍 종료되었습니다. 희망하는 awk는 내가 필요로하는 것을 할 수 있지만 어떻게 볼 수는 없다!변수에서 이스케이프 문자로 인해 Sed가 실패 함

# Main section ==========================================╕ 
LASTIP=`grep -E '[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}\.[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}\.[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}\.[0-2]{0,1}[0-9]{0,9}[0-9]{0,1}' $SRCDIR/$IPLOGFILE | tail -1|awk -F'\t' '{print$3}'` 
if [ "$CURRENTIP" == "$LASTIP" ]; then 
# Still using old IP===================================╕ 
    FIRSTDETECTED=`grep $LASTIP $SRCDIR/$IPLOGFILE | tail -1|awk -F'\t' '{print$1}'` 
    LASTDETECTED=`grep $LASTIP $SRCDIR/$IPLOGFILE | tail -1|awk -F'\t' '{print$2}'` 
    OLDLINE=$(printf "$FORMAT" "$FIRSTDETECTED" "$LASTDETECTED" "$LASTIP") 
    AMENDEDLINE=$(printf "$FORMAT" "$FIRSTDETECTED" "$TIMESTAMP" "$LASTIP") 
    sed -i "s/'$OLDLINE'/'$AMENDEDLINE'/g" $SRCDIR/$IPLOGFILE 

이 떨어져 $OLDLINE 및/또는 $AMENDEDLINE가 문자를 이스케이프가 포함되어 있기 때문에 종료하는 마지막 SED에서 잘 작동합니다. 나는 문제를 해결하기 위해 awk에 대한 직접적인 대체를 할 수 있다고 생각했지만, 더 많은 정보를 원하면 awk로 한 섹션에서 전체 섹션을 훨씬 더 효율적으로 처리 할 수있을 것이라고 생각했다. 문제는 어디서부터 시작해야할지 모르겠다. 나는 그것을 단순화하는 것에 대해 자신을 바보짓을하고 있는가, 아니면 방법이 있는가? P

나는 섹션을 냈다했습니다하지만를 제공 할 수 있다면, 당신은

이 * 카트 먼의 호의 나는이 물건을 발견하면 * '내 깨지기 쉬운 작은 마음을 휘어', 나 좀 도와 할 수 있습니다 스크립트의 나머지 부분이 도움이된다면?

+0

를 확장되지 않습니다 '$의 AMENDEDLINE'는, 내가 대신 마지막의 다음 두 줄을 시도했습니다 SED '-i "S /"$ OLDLINE '/'$의 AMENDEDLINE '/ g "$ SRCDIR/$ IPLOGFILE' '나오지 -i"$ d 개 "$ SRCDIR/$ IPLOGFILE' '의 printf"$ #sed 형식 ""$ FIRSTDETECTED ""$ TIMESTAMP ""$ LASTIP ">> $ SRCDIR/$ IPLOGFILE' – Greg

+0

"섹션을 잘라 냈지만 공급할 수 있음 나머지는 .. "[최소, 완전하고 검증 가능한 예제들] (http://stackoverflow.com/help/mcve)에 대해 읽어보십시오."War and Peace "전체가 아니라 문제를 일으키는 최소한의 코드를보고 싶습니다. ;-). 문제를 기초로 제거 할 때 종종 해결책을 찾을 수 있습니다. 행운을 빕니다. – shellter

+0

나는 일반적으로 당신의 의견을지지하지만, 하나의 awk가 LASTIP, IF 조건, FIRSTDETECTED & LASTDETECTED를 제공하는 greps 그리고 마지막으로 파일의 최신 타임 스탬프를 업데이트하는 sed를 대체 할 수 있는지 묻고있다. 컨텍스트를 표시하지 않고 문제를 '재생산'하는 방법을 볼 수 없습니다. 그렇기 때문에 디버깅을 시도했던 몇 개의 에코/프린트를 제거 할 수있었습니다. – Greg

답변

0

당신은 아마도 내가 '$ OLDLINE'생각

sed -i 's/'"$OLDLINE"'/'"$AMENDEDLINE"'/g' "$SRCDIR"/"$IPLOGFILE" 

같은 시도 할 수 있습니다 및 해결 방법으로

관련 문제