구성 파일의 두 번째 단어인 Grep 매개변수를 사용하는 방법은 무엇입니까?

구성 파일의 두 번째 단어인 Grep 매개변수를 사용하는 방법은 무엇입니까?

현재 저는 매개 변수를 기반으로 구성 파일에서 영역 레코드를 검색한 다음 해당 출력을 사용하여 텍스트 파일을 만들고 해당 출력 파일에서 소스 파일 경로를 읽는 스크립트를 작성 중입니다. 이제 텍스트 파일을 생성해야 하기 때문에 모듈이라는 매개 변수를 하나 더 전달해야 합니다.

내 거스크립트:

#!/bin/bash

SOURCE_CONF="./test.properties"

#input region name
region="$1"
echo $region
cwd=$(pwd)
calu=$(grep $region test.properties > ab.txt)

IFS=$'\n'

#loop to read the config one line at a time
while read p; do
    echo $p

    a=($(echo "$p" | tr '|' '\n'))
    echo "Region is:" "${a[0]}"
    echo "path is:""${a[3]}"
    path="${a[3]}"
    #remove white space before path
    echo $cwd
    NO_LEAD_SPACE="$(echo -e $path | tr -d '[:space:]')"
    echo "path is:"$NO_LEAD_SPACE
    # change to path spacified in the config file
    sh -c 'cd $NO_LEAD_SPACE && echo "in the subshell" && echo $pwd && echo "exit subshell" && exec pwd'
    echo $cwd
    echo "--------------------"
done < ab.txt

echo "abc"

내 거구성 파일:

region | Module |country code | filepath |filename


APJ | WDMD | MYS |/c/Users/vattikun/desktop | MYS*ADPGV*.XML
APJ | WDED | EUR|/c/Users/vattikun/desktop/Payroll Support | EUR*ADPGV*.XML

APJ | WDMD | RER|/c/Users/vattikun/desktop/Payroll Support | RER*ADPGV*.XML

APJ | WDJD | EYZ|/c/Users/vattikun/desktop/Payroll Support | EYZ*ADPGV*.XML


EMA | WDMD | AUS|/c/Users/vattikun/desktop | AUS*ADPGV*.XML
EMA | WDMD | AYS| /c/Users/vattikun/desktop | AYS*ADPGV*.XML

AMS | WDMD |ITI| /c/Users/vattikun/desktop | ITI*ADPGV*.XML
AMS |WDMD |AYS| /c/Users/vattikun/desktop | AYS*ADPGV*.XML

ETIME | WDMD |ADP /c/Users/vattikun/desktop | ADP_WDET_JOBCODE*.XML
ETIME | WDMD |AEP| /c/Users/vattikun/desktop | AEP_WDET_JOBCODE*.XML

답변1

귀하가 요청한 특정 질문에 대답하려면 한 필드를 건너뛰는 패턴으로 검색 표현식을 시작하십시오.

module="$2"
/bin/grep "^[^|]*| *${module}\\>" test.properties

그것을 파괴:

^      Start of line
[^|]*  0 or more non-separator characters
|      A field separator
 *     0 or more spaces
${module}  Switch from single- to double-quotes to interpolate variable name
\\>    End of a word ("\\>" becomes '\>' when shell parses it)

awk그러나 다음과 같은 것을 사용하는 것이 더 나을 것입니다 perl.

awk -F' *\\| *' -v module="$module" '$2 == module' test.properties

장기적으로는 CSV와 같은 잘 알려진 형식과 그에 맞는 도구를 사용하는 것이 좋습니다.

관련 정보