Intereting Posts
Возможно ли обходить ретранслятор SSH-сервера? Почему корневой вход через SSH настолько плох, что каждый советует отключить его? Удаленный SCP для локального сбоя Многопоточность / Викинг в сценарии bash Лучше ли использовать $ (pwd) или $ PWD? Какие ужасные ошибки я должен избегать как newb? Touchpad не работает должным образом после обновления – Arch на Chromebook XFCE – запуск ярлыка с правами root без пароля Как заблокировать имена хостов с помощью подстановочных знаков или Regex? Простой сценарий bash, который слишком долго выполняется Сервер ключей GPG, который может напрямую импортировать-экспортировать ключи с помощью hkp В OpenBSD заканчивается нехватка памяти, в то время как не используется пространство подкачки Как сделать программу / обработать услугу? Почему разные установки различной пунктуации по-разному? Запустите сценарий оболочки через символическую ссылку из каталога, содержащего сам сценарий

Как 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 

Чтобы ответить на конкретный вопрос, который вы задали, начните поисковое выражение с шаблона, который пропустит одно поле:

 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, и инструменты, предназначенные для работы с ним.