如何使用参数 Grep 配置文件中的第二个单词?

如何使用参数 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)

但你最好使用类似awkor 的东西perl

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

从长远来看,最好使用 CSV 等众所周知的格式以及与之配合使用的工具。

相关内容