변수에서 이스케이프 문자 때문에 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
나는 섹션을 냈다했습니다하지만를 제공 할 수 있다면, 당신은
이 * 카트 먼의 호의 나는이 물건을 발견하면 * '내 깨지기 쉬운 작은 마음을 휘어', 나 좀 도와 할 수 있습니다 스크립트의 나머지 부분이 도움이된다면?
를 확장되지 않습니다 '$의 AMENDEDLINE'는, 내가 대신 마지막의 다음 두 줄을 시도했습니다 SED '-i "S /"$ OLDLINE '/'$의 AMENDEDLINE '/ g "$ SRCDIR/$ IPLOGFILE' '나오지 -i"$ d 개 "$ SRCDIR/$ IPLOGFILE' '의 printf"$ #sed 형식 ""$ FIRSTDETECTED ""$ TIMESTAMP ""$ LASTIP ">> $ SRCDIR/$ IPLOGFILE' – Greg
"섹션을 잘라 냈지만 공급할 수 있음 나머지는 .. "[최소, 완전하고 검증 가능한 예제들] (http://stackoverflow.com/help/mcve)에 대해 읽어보십시오."War and Peace "전체가 아니라 문제를 일으키는 최소한의 코드를보고 싶습니다. ;-). 문제를 기초로 제거 할 때 종종 해결책을 찾을 수 있습니다. 행운을 빕니다. – shellter
나는 일반적으로 당신의 의견을지지하지만, 하나의 awk가 LASTIP, IF 조건, FIRSTDETECTED & LASTDETECTED를 제공하는 greps 그리고 마지막으로 파일의 최신 타임 스탬프를 업데이트하는 sed를 대체 할 수 있는지 묻고있다. 컨텍스트를 표시하지 않고 문제를 '재생산'하는 방법을 볼 수 없습니다. 그렇기 때문에 디버깅을 시도했던 몇 개의 에코/프린트를 제거 할 수있었습니다. – Greg