Обработка подстановочных знаков из массива строк в сценариях оболочки bash - PullRequest
0 голосов
/ 13 апреля 2011

Ниже приведен пример сценария, который я написал

line="/path/IntegrationFilter.java:150:         * <td>http://abcd.com/index.do</td>"
echo "$line"          <-- "$line" prints the text correctly
result_array=( `echo "$line"| sed 's/:/\n/1' | sed 's/:/\n/1'`)
echo "${result_array[0]}"
echo "${result_array[1]}"
echo "${result_array[2]}"  <-- prints the first filename in the directory due to wildcard character *  .

Как получить текст "* http://abcd.com/index.do" вместо имени файла при извлечении из массива?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Предполагая, что bash является правильным инструментом, есть несколько способов:

  1. отключить расширение имени файла временно
  2. использовать читать сIFS
  3. использовать функцию подстановки расширение bash

Отключение расширения:

line="/path/IntegrationFilter.java:150:         * <td>http://abcd.com/index.do</td>"
set -f
OIFS=$IFS
IFS=$'\n'
result_array=( `echo "$line"| sed 's/:/\n/1' | sed 's/:/\n/1'`)
IFS=$OIFS
set +f
echo "${result_array[0]}"
echo "${result_array[1]}"
echo "${result_array[2]}"

(обратите внимание, мы также должны были установить IFS,в противном случае каждая часть содержимого заканчивается в result_array [2], [3], [4] и т. д.)

Использование read:

line="/path/IntegrationFilter.java:150:         * <td>http://abcd.com/index.do</td>"
echo "$line"
IFS=: read file number match <<<"$line"
echo "$file"
echo "$number"
echo "$match"

Использование расширения / замены параметра bash:

line="/path/IntegrationFilter.java:150:         * <td>http://abcd.com/index.do</td>"
rest="$line"
file=${rest%%:*}
[ "$file" = "$line" ] && echo "Error"
rest=${line#$file:}

number=${rest%%:*}
[ "$number" = "$rest" ] && echo "Error"
rest=${rest#$number:}

match=$rest

echo "$file"
echo "$number"
echo "$match"
0 голосов
/ 13 апреля 2011

Как насчет:

$ line='/path/IntegrationFilter.java:150:         * <td>http://abcd.com/index.do</td>'

$ echo "$line" | cut -d: -f3-
* <td>http://abcd.com/index.do</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...