Как записать только необходимые строки из файла в массив в скрипте bash? - PullRequest
0 голосов
/ 03 октября 2019

Я написал следующий код, чтобы прочитать файл и записать его в список, используя скрипт bash:

index=0
while read line
do
  array[$index]="$line"
  index=$(($index+1))
done < ../../file.xml

Однако мне нужно записывать строки в массив только в том случае, если они содержат слово «значок»,Элемент массива должен выглядеть следующим образом:

<icon height="36" width="36" density="ldpi" src="res/icon/android/ldpi.png"/>

Может ли кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Тривиально, с условием.

case $line in *icon*) ... do stuff;;

Вы, вероятно, должны исправить синтаксис для использования read -r, а переменная index действительно не нужна.

array=()
while read -r line
do
  case $line in *icon*) array+=("$line");; esac
done < ../../file.xml

Более разумносделать все это одним махом, в Bash 4 +

readarray index < <(grep 'icon'  ../../file.xml)

Вероятно, наиболее разумно, если файл действительно является XML, используйте синтаксический анализатор XML, такой как xmlstarlet, чтобы правильно определить и извлечь нужную структуруизучить.

readarray index < <(xmlstarlet sel -t -m //icon -c . -n ../../file.xml)
0 голосов
/ 03 октября 2019

Вы можете использовать регулярное выражение:

regex="icon"
index=0
while read line
do
  if [[ $line =~ $regex ]]; then
    array[$index]="$line"
    #If you need cut address uncommend next line and comment before line
    #array[$index]="$(sed 's/.*src=\"\(.*\)\".*/\1/' <<< $line)"
    index=$(($index+1))
  fi
done < ../../file.xml
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...