正则表达式仅替换属性名称中的连字符

时间:2013-11-22 14:46:30

标签: regex sed

我有一个看起来像这样的字符串。

<tag-name i-am-an-attribute="123" and-me-too="321">

我想要做的就是将短划线替换为下划线,但标签名称应保持原样。

希望有一些正则表达的大师可以帮助我。

[溶液] 如果有人需要这个。
我最终得到了一个perl oneliner命令 echo '<tag-name i-am-an-attribute="123" and-me-too="321">' | perl -pe 's/( \K[^*"]*)-/$1_/g;' | perl -pe 's/ / /g;'
结果

<tag-name i_am_an_attribute="123" and_me_too="321">

2 个答案:

答案 0 :(得分:1)

使用sed:

sed ':l;s/-\([^- ]*\)\( *=\)/_\1\2/g;tl' input

给出:

<tag-name i_am_an_attribute="123" and_me_too="321">

答案 1 :(得分:0)

使用&lt; tag-name i-am-an-attribute =“123”和-me-too =“321”&gt;作为文件中的一行: -

read -r < file

fullstring=$(echo "${REPLY}" | sed s'@-name @-name:@')

field1=$(echo "${fullstring}" | cut -d':' f1)
field2=$(echo "${fullstring}" | cut -d':' f2)

fixedfield=$(echo "${field2}" | sed s'@-@_@'g)

echo "${field1} ${fixedfield}"

我发现使用脚本编写最重要的是在文本中提供自己的锚点,您可以使用它来将其剪切成可以随后执行操作的段。尝试使用分隔符将文本格式化为实际字段;它让生活变得更轻松。