2013-07-20 99 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 

它使用双引号作为字段分隔符。所引用的字符串因此将是一个奇数字段。