나는 몇 가지 작업을 자동화하기 위해 bash 스크립트를 작성하고있다. 필자가해야 할 일 중 하나는 디렉토리의 파일 이름 중에서 패턴을 검색 한 다음 결과를 반복하는 것입니다. 나는이 스크립트를 실행하면ls | grep with variable with regex
는 : - 확장 .ext
와 $A_PATH_VAR/
에 파일 이름들 사이에서 발견 된 모든 일치 목록
data=$(ls $A_PATH_VAR/*.ext | grep -o '201601[0-9]\{2\}\|201602[0-9]\{2\}')
echo $data
을 나는 예상 결과를 얻을. 그러나, 나는 저장할 때 변수에 패턴 말했다 다음과 같이 사용 :
startmo=201601
endmo=201602
mo=$((startmo+1))
grepstr="'$startmo[0-9]\{2\}"
while [ $mo -le $endmo ]
do
grepstr="$grepstr\|$mo[0-9]\{2\}"
mo=$((mo+1))
done
grepstr="$grepstr'"
echo $grepstr # correct
data=$(ls $A_PATH_VAR/*.ext | grep -o $grepstr)
echo $data
$grepstr
의 패턴이 올바르게 에코됩니다 - 즉,이 값 '201601[0-9]\{2\}\|201602[0-9]\{2\}'
포함되어 있지만 $data
는 비어 있습니다. 왜 이런거야?
내 솔루션 : 아래에서
mo=$((startmo+1))
grepstr="($startmo[0-9][0-9]"
while [ $mo -le $endmo ]
do
grepstr="$grepstr|$mo[0-9][0-9]"
mo=$((mo+1))
done
grepstr="$grepstr)"
files=$(ls $A_PATH_VAR/*.ext)
setopt shwordsplit
for file in $files
do
if [[ $file =~ $grepstr ]]
then
date=$BASH_REMATCH
fi
...
done
'패턴 = " '패턴'"'패턴 = 'pattern'''하고 당신은 grepping해서는 안 어디에 – anubhava
당신은 모든 당신의 변수를 인용해야한다 'ls' 출력은로 시작합니다. http://mywiki.wooledge.org/ParsingLs –
을 참조하십시오 ... 왜 문자와 구문 인용 부호를 혼합 할 수 없는지 이해하려면 http://mywiki.wooledge.org/BashFAQ/050 –