Shell-Script
如何將所有目錄標籤放入不同的變數中
我已經從一個文件中獲取了所有的目錄標籤。現在,我陷入了一種情況,我想將整個單獨的目錄標籤儲存到不同的變數中,如下所示。提前致謝。
以下是我獲取的內容:
<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