我有一个看起来像这样的字符串。
<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">
答案 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}"
我发现使用脚本编写最重要的是在文本中提供自己的锚点,您可以使用它来将其剪切成可以随后执行操作的段。尝试使用分隔符将文本格式化为实际字段;它让生活变得更轻松。