패턴이 일치하는 경우 쉘 스크립트

패턴이 일치하는 경우 쉘 스크립트

다음 단어가 포함된 파일이 있습니다.

gl-events_0
gl-events_1
gl-events_2
gl-mx-events_0
gl-mx-events_1
gl-mx-events_2

그래서 gl-events의 패턴이 일치하면 명령 A를 실행해야 하고 패턴이 gl-mx-events이면 명령 B를 실행해야 한다고 생각했습니다.

다음을 시도했지만 나에게 효과가 없습니다

STR='gl-mx-events_0'
SUB='gl-mx-events'
if [[ "$STR" == *"$SUB"* ]]; then
echo "you need to run command B"

내 요구 사항은 실행해야 하는 단어를 기반으로 패턴이 일치하는지 여부입니다.

command A --- (only for gl-events_0 ...... gl-events_10)
command B --- (only for gl-mx-events_0 ...... gl-mx-events_10)

누구든지 이것을 달성하는 방법을 안내해 줄 수 있습니까?

안녕하세요, 사무라이

답변1

이 같은?

n=1
while IFS= read -r line; do
    if [[ $line = *gl-events* ]]; then
        printf "line %d has gl_events, doing something\n"  "$n"
        # run command A with "$line"
    fi
    if [[ $line = *gl-mx-events* ]]; then
        printf "line %d has gl-mx-events, doing something different\n"  "$n"
        # run command B with "$line"
    fi
    n=$((n+1))
done  < file

그러나 @Panki의 의견처럼 grep키워드를 기준으로 행을 필터링한 다음 xargs원하는 명령을 실행할 수도 있습니다. 예를 들어, xargs의 GNU 버전을 사용하면 다음과 같습니다.

< file grep ^gl-events_    |xargs -d '\n' -n1 echo "running command A with arg" 
< file grep ^gl-mx-events_ |xargs -d '\n' -n1 echo "running command B with arg" 

(기본적으로 xargs어느입력의 공백은 입력 요소를 구분하며, 따옴표와 백슬래시는 어떤 것과도 호환되지 않는 방식으로 해석됩니다. -d '\n'입력 라인을 그대로 사용하도록 지시 합니다. )

관련 정보