2015-02-24 64 views
0

我想用名稱的bash命令創建一個數組。我有這種形式的文件,從一個文件創建一個名稱數組

<span class="username js-action-profile-name">@paulburt07</span> 
<span class="username js-action-profile-name">@DavidWBrown7</span> 
<span class="username js-action-profile-name">@MikeLarkan</span> 
<span class="username js-action-profile-name">@WeathermanABC</span> 
<span class="username js-action-profile-name">@JoshHoltTEN</span> 
<span class="username js-action-profile-name">@TonyAuden</span> 
<span class="username js-action-profile-name">@Magdalena_Roze</span> 
<span class="username js-action-profile-name">@janesweather7</span> 
<span class="username js-action-profile-name">@VanessaOHanlon</span> 

我需要一個像

array = ("paulburt07" "DavidWBrown7" "MikeLarkan" "WeathermanABC" "JoshHolTEN" "TonyAuden" "Magdalena_Roze" "janesweahter7" "VansessaOHanlon") 

任何想法的陣列?

+0

我想念他們,現在他們 – 2015-02-24 10:14:42

回答

2

是許多可能的解決方案:

array=($(grep -oP '@\K(.*)(?=<)' file)) 

編輯: 沒有太多的解釋,grep搜索由正則表達式定義的模式文件。 (見man grep)。 -o只打印匹配,-P說,使用perl-ish正則表達式。

@\K(.*)(?=<)平均:

  • 搜索和匹配@
  • 忘記了比賽\K,(但要記住位置)
  • 比賽螞蟻串(.*)
  • ,直到發現<

$(command)稱爲命令替換,array=(...)賦值給數組。

EDIT2 因爲你原來的輸入可能包含更多的HTML標籤,你可以使用HTML解析器,例如:

array=($(perl -Mojo -E 'say $_->text for x(b("filename.html")->slurp)->find(q{span[class~="username"]})->each')) 

將打印任何<span class=username>...</span>的內容在任何HTML,無論它的格式。但對於上述你需要安裝Mojolicious

+0

當我鍵入echo $陣列我只收到名字paulburt07 – 2015-02-24 10:26:47

+0

這是正常行爲,@EnricAgudPique。要循環瀏覽內容,您需要爲'$ {array [@]}中的項目說';做回聲「$ item」; done'。 – fedorqui 2015-02-24 10:32:23

+0

哦,是的!對不起我的問題 – 2015-02-24 10:33:17

1

它是使用sed和tmp文件非常簡單:

#!/bin/bash 

fname=${1:-htmlnames.txt}   # original html file 
tmp=${2:-htmltmp.txt}    # temp file to use 

sed -e 's/.*@//' "$fname" > "$tmp" # remove up to '@' and place in temp 
sed -i 's/[<].*$//' "$tmp"   # remove remainder in place in temp 
namearray=($(<"$tmp"))   # read temp file into array 
rm "$tmp"       # remove temp file 

for i in "${namearray[@]}"; do  # print out to verify 
    printf " %s\n" "$i" 
done 

exit 0 

輸出:

alchemy:~/scr/tmp/stack/tmp> bash htmlnames.sh 
paulburt07 
DavidWBrown7 
MikeLarkan 
WeathermanABC 
JoshHoltTEN 
TonyAuden 
Magdalena_Roze 
janesweather7 
VanessaOHanlon 
+0

更好地引用'$ {namearray [@]}',這樣就可以正確處理帶空格的名稱。 – fedorqui 2015-02-24 10:32:59

+1

良好的捕獲 - 修復。 – 2015-02-24 10:46:25

+0

也可用於sed – 2015-02-24 10:57:34

相關問題