在特定位置将字符串从小写字母替换为大写字母

时间:2019-03-07 13:47:41

标签: shell unix

我有带标签的文件。我需要将“元素名称”的所有值从小写更改为大写。如果标签中有多个变量,则还应继续仅替换“元素名称”值。

输入文件:

<element name="product-info">
  <element name="user-info" maxTimes="total-name">
    <maxHelp="user-help">

请求的输出文件:

<element name="PRODUCT-INFO">
  <element name="USER-INFO" maxTimes="total-name">
    <maxHelp="user-help">

2 个答案:

答案 0 :(得分:0)

sed 's/\([ \t\n\r\f]\)name="\([^"]*\)"/\1name="\U\2"/g' inputfile > outputfile

或者-为便于阅读,请使用扩展的正则表达式:

sed -E 's/(\sname=")([^"]+")/\1\U\2/g' inputfile > outputfile

答案 1 :(得分:0)

在经过谷歌搜索和反复试验后,XSLT:

$ cat file.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
    <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="element/@name">
        <xsl:attribute name="name">
            <xsl:value-of select="translate(., $lowercase, $uppercase)" />
        </xsl:attribute>
    </xsl:template>

    <xsl:template match="product/@id"/>
</xsl:stylesheet>
$ cat file.xml
<root>
  <otherelement name="foo" />
  <element name="product-info">
    <element name="user-info" maxTimes="total-name">
      <element maxHelp="user-help">
      </element>
    </element>
  </element>
</root>
$ xsltproc file.xsl file.xml
<?xml version="1.0"?>
<root>
  <otherelement name="foo"/>
  <element name="PRODUCT-INFO">
    <element name="USER-INFO" maxTimes="total-name">
      <element maxHelp="user-help">
      </element>
    </element>
  </element>
</root>