替换空格并在字符串中转换为小写

时间:2012-12-04 17:59:38

标签: linux sed awk

我有多个html文件,我需要替换一个空格并在字符串中使字符串小写。 (全部在linux中)

Exaple:
<html> ....
<a href="bla.com/CCC C C">ddd ddd ddd</a>
<a href="bla.com/CCC C">ddd ddd ddd</a>
...
</html>

Should result in:
<html> ....
<a href="bla.com/ccc_c_c">ddd ddd ddd</a>
<a href="bla.com/ccc_c">ddd ddd ddd</a>
...
</html>

页面上还有其他链接,但它们不是bla.com,它们是其他的东西,所以如果使用常规exp(bla.com需要在那里)。 CCC部分不是静态的,可以是任何单词!

任何可以做到这一点的单线?

1 个答案:

答案 0 :(得分:1)

  

我需要替换 a 空格并在字符串

中使字符串小写

对于只有空格的间隔,那么这一个班轮将会这样做:

sed -E 's/(bla.com\/)(\w*)\s*(.*?")/\1\L\2_\L\3/g' file

$ echo '<a href="bla.com/CCC C">ddd ddd ddd</a>' | sed -E 's/(bla.com\/)(\w*)\s*(.*?")/\1\L\2_\L\3/g'
<a href="bla.com/ccc_c">ddd ddd ddd</a>

说明:

s/            # Substitution
(bla.com\/)   # Match the domain (captured)
(\w*)         # Match the following word (captured) 
\s*           # Followed by whitespace
(.*?")        # Capture everything left upto the closing "
/             # Replace with 
\1            # The captured domain
\L\2          # Lowercase first captured word
_             # Replace the whitespace with an underscore 
\L\3          # Lowercase rest of the match
/g            # Global

如果在你的例子中可能有多个空格,我很难找到一个班轮。