Shell-Script

如何將所有目錄標籤放入不同的變數中

  • April 7, 2020

我已經從一個文件中獲取了所有的目錄標籤。現在,我陷入了一種情況,我想將整個單獨的目錄標籤儲存到不同的變數中,如下所示。提前致謝。

以下是我獲取的內容:

<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>

請注意:目錄標籤不只是兩個,目錄標籤有很多,它們之間沒有任何間隙。每個單獨的目錄都必須儲存在一個單獨的變數中。

提前致謝

您可以遍歷文件的行並將新行添加到字元串中,直到遇到</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

引用自:https://unix.stackexchange.com/questions/578231