2013-07-20 118 views
0

我需要一個linux bash腳本,它可以替換name =「this is a test」中的空格。bash腳本替換html中的空格

例如:

<input name="this is a test" id="testing 1 2 3" /> 

就改成這樣:

<input name="thisisatest" id="testing 1 2 3" /> 

編輯:腳本必須能夠匹配雙引號之間的任何東西。它可能是這樣的:

<input name="THIS STRING WILL VARY" id="testing 1 2 3" /> 

任何想法?

+0

將Python解決方案作爲一個有效的答案 - 它的標籤是這樣的,但你要求一個bash腳本... –

+0

我會採取任一。 – user2602373

回答

3

使用Python - 採取一種HTML文件,並從input標記中刪除空格,該標記的name屬性等於this is a test,則可以使用:

from bs4 import BeautifulSoup 

with open('input') as fin, open('output', 'w') as fout: 
    soup = BeautifulSoup(fin.read()) 
    for tag in soup.find_all('input', {'name': 'this is a test'}): 
     tag['name'] = tag['name'].replace(' ', '') 
    fout.write(str(soup)) 

迴應:

我忘了說,字符串「這是測試」可以是任何東西

您只需過濾掉所有input標記,有name屬性並應用任何您想要的邏輯 - 下面將刪除任何名稱屬性中的空格:

for tag in soup.find_all('input', {'name': True}): 
    tag['name'] = tag['name'].replace(' ', '') 
+0

我忘了說,字符串「這是一個測試」可以是任何東西。 – user2602373

+0

@ user2602373已更新,以顯示如何查找和替換具有名稱屬性的任何輸入標記 - 將所需的任何邏輯放入其中... –

0
>>> name = 'this is a test' 
>>> ''.join(name.split()) 
'thisisatest' 
+1

無法解釋如何在文件中進行替換,但是'name.replace('','')'有什麼問題? –

+0

這也將工作 – enderx1x

0

您可以使用sed

foo='<input name="this is a test" id="testing 1 2 3" />' 
echo $foo | sed 's/this is a test/thisisatest/' 

如果你想這樣做在一個文件中,並保存它,你可以這樣做:

sed 's/this is a test/thisisatest/' filename > filename 
+0

我忘了說,字符串「這是一個測試」可以是任何東西。它必須匹配名稱=「這個文本可以改變」 – user2602373

0

H ere的awk單線程

awk ' 
    BEGIN {FS=OFS="\""} 
    {for (f=2; f<=NF; f++) if ($(f-1) ~ /name=$/) gsub(/ /, "", $f)} 
    1 
' file 

它使用雙引號作爲字段分隔符。所引用的字符串因此將是一個奇數字段。