2016-06-30 2 views
0

출력 파일을 만들기 위해/w 플래그와 함께 sed 명령을 사용하는 쉘 스크립트가 있습니다. 스크립트에서 해당 파일을 사용하려고하면 파일을 찾을 수 없지만 스크립트가 종료 된 후 해당 파일이 디렉토리에 생성됩니다.쉘 스크립트에서/w 매개 변수가있는 sed 명령

스크립트 내에서 생성 된 파일을 사용할 수 있습니까? 그 일을하려면 무엇을해야합니까?

#!/usr/bin/bash 
fileQual=Test_load 

dataFile=$fileQual.dat 
corruptDataFile=$fileQual.err 

cp "${dataFile}" "${dataFile}".cpy 

LANG=C sed -n '/[\x00-\x08\x80-\xFF\x0B-\x0C\x0E-\x1F\x21-\x2B\x2F\x3A-\x40\x5B-\x60\x7B\x7D-\x7F]/w '${corruptDataFile}' ' "${dataFile}".cpy 
echo "file corruptDataFile = ${corruptDataFile}" 
ls ${corruptDataFile} 

function checkNattach() 
{ 
    local fname="$1" 
    local atch 
    if [ -f "$1" ];then 
     atch="-a ${fname} " 
     echo "${fname} exists" 
    else 
     echo "${fname} not found" 
    fi 
    #resFun=atch 
    # echo " in function checkNattach atch $atch " 
    # echo " in function checkNattach resFun $resFun " 
    echo $atch 
} 

TIME=`date +%F-%H%M%S`     # time stamp to the backup file 
FILENAME="Test-$TIME.zip"  # defining the format of the file name while backing up 

echo $FILENAME 
zipincl="" 
zipincl="${zipincl} $(checkNattach ${corruptDataFile})" 
echo "**********zipincl ${zipincl} ${corruptDataFile} " 

zip -9 $FILENAME $corruptDataFile $dataFile 

그리고 스크립트가 내가 디렉토리에 보면, 파일이 실제로 존재, 완료되면 출력은

file corruptDataFile = Test_load.err 

ls: Test_load.err: No such file or directory 


Test-2016-06-29-204904.zip 

**********zipincl Test_load.err not found Test_load.err 
+ zip -9 Test-2016-06-29-204904.zip Test_load.err Test_load.dat 
     zip warning: name not matched: Test_load.err 

입니다. zip 명령에서 사용할 수있는 방법이 있습니까?

+0

'\ x00- \ x08 \ x80..'을 사용하여 수행하고자하는 작업은 무엇입니까? – sjsam

+0

기본적으로 해당 문자가 포함 된 파일의 줄을 제거하십시오. – adbdkb

+0

많은 코드가 있습니다. [MCVE] (http://stackoverflow.com/help/mcve)에서 문제를 격리 할 수 ​​있습니까? 또한 어떤 운영 체제를 실행하고 있습니까? '/ usr/bin/bash'는 이상한 장소처럼 보입니다. OS는'sed'와 같이 실행중인 다른 도구의 맛에 영향을 미칩니다. 아, 그리고 일반적으로 bash에서 항상 변수를 인용하십시오. 'dataFile = "$ fileQual.dat"'등 – ghoti

답변

1
LANG=C sed -n '/[\x00-\x08\x80-\xFF\x0B-\x0C\x0E-\x1F\x21-\x2B\x2F\x3A-\x40\x5B-\x60\x7B\x7D-\x7F]/w '${corruptDataFile}' ' "${dataFile}".cpy 

위의 행에서 '${corruptDataFile}' 뒤에 공백을 제거하십시오. 그것은 끝에 공간이있는 파일 이름을 만듭니다.

+0

원인 인 것 같습니다. 나는 더 많은 테스트를 수행하고 여기에보고 할 것이다. – adbdkb

+0

몇 가지 테스트를 더 실시했는데 효과가있는 것 같습니다. – adbdkb