ファイルからすべてのディレクトリタグを取得しました。これで、以下のように、個々のディレクトリタグ全体を別の変数に保存したい状況に収まりました。よろしくお願いします。
私が得るものは次のとおりです。
<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