すべてのディレクトリタグを別の変数に入れる方法

すべてのディレクトリタグを別の変数に入れる方法

ファイルからすべてのディレクトリタグを取得しました。これで、以下のように、個々のディレクトリタグ全体を別の変数に保存したい状況に収まりました。よろしくお願いします。

私が得るものは次のとおりです。

<Directory />
    AllowOverride none
    Order deny, allow
    Deny from all
</Directory>
<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>

必須:

# echo $var1
<Directory /> 
AllowOverride none 
Order deny, allow 
Deny from all 
</Directory>

# echo $var2
<Directory "/var/www"> 
AllowOverride None  
Require all granted 
</Directory>

注:2つのディレクトリタグだけでなく、間にスペースがない多くのディレクトリタグもあります。各完全な個々のディレクトリは別々の変数に保存する必要があります。

事前にありがとう

ベストアンサー1

ファイルの行を繰り返し、マーカーが見つかるまで文字列に新しい行を追加できます</Directory>

ラベルだけでコードがはるかに簡単になりますDirectory。タグが何人かわからない場合は、使用varX時に変数を宣言してください。declare

STR=""
i=1
DIRTAG=false
while read -r LINE; do
    if grep -q '^<Directory' <<< $LINE; then
        DIRTAG=true
    fi
    if $DIRTAG; then
        STR+="$LINE
"
    fi
    if grep -q '^</Directory>' <<< $LINE; then 
        declare var$i="\"\"\"$STR\"\"\"" #You're not clear on the quotes
        STR=""   
        i=$((i+1))
        DIRTAG=false
    fi
done < t.txt

次のようにecho "$var1"; echo "$var2"出力します(二重引用符を忘れないでください。そうしないと、印刷物の改行文字が空白になります)。

"""<Directory />
AllowOverride none
Order deny, allow
Deny from all
</Directory>
"""
"""<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
"""

タグの数がわからない場合は、それを使用して生成された変数を繰り返すことができます。

for j in `seq 1 $((i-1))`; do
    var=var$j
    echo "${!var}"
done

おすすめ記事