如何分割文件行使用特定的脚本和显示在特定的方向格式在shell脚本不使用awk

x759pob2  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(104)

输入文件:输入.txt

<UndefineProperty name="admin.admin.adapters"/>--><!--<AddToProperty 
name="admin.admin.adapters"
value="abc^abc.xz=abc"/>--><Property name="admin.admin.adapters" ride="true"
         targetFile="file/path/file.txt"
         value="abc,xz=abc,xz=com^abc.com.xz=abc,ac=com"/>
<ConfigurationRef xlink:href="file/path/file.xconf"/>
<ConfigurationRef xlink:href="file1.xconf"/>
<ConfigurationRef xlink:href="file2.xconf"/>
<Property name="ac.abc.Password" ride="true"
         targetFile="file/path/abc.properties"
         value="ac.abc.encryptedPassword"/>
<Property name="ac.pqr.Protocol" ride="true"
         targetFile="file/pqr.properties"
         value="https"/>

输出:

<UndefineProperty name="admin.admin.adapters"/>-->
<!--<AddToProperty name="admin.admin.adapters" value="abc^abc.xz=abc"/>-->
<Property name="admin.admin.adapters" ride="true" targetFile="file/path/file.txt" value="abc,xz=abc,xz=com^abc.com.xz=abc,ac=com"/>
<ConfigurationRef xlink:href="file/path/file.xconf"/>
<ConfigurationRef xlink:href="file1.xconf"/>
<ConfigurationRef xlink:href="file2.xconf"/>
<Property name="ac.abc.Password" ride="true" targetFile="file/path/abc.properties" value="ac.abc.encryptedPassword"/>
<Property name="ac.pqr.Protocol" ride="true" targetFile="file/pqr.properties" value="https"/>

已尝试:

delimiter="<"
newarray=()

while read -r line ; 
do
  newarray+=( "${line%%"$delimiter"*}" )
  line=${delimiter}${line#*"$delimiter"}
  echo ${line} >> input.txt1
done < input.txt

**注意:**以上代码未按预期工作。它只显示包含此(<)的输出,并且在上面的代码中也没有进行定向。

4uqofj5v

4uqofj5v1#

不能用简单的sed或bash程序可靠地解析XML。
这个bash脚本从问题中提供的样例输入生成问题中提供的样例输出:

(
    set extglob
    v=
    while read -r r; do v+=${v:+ }$r; done <input.txt
    echo "${v//>?( )</>$'\n'<}" >input.txt1
)
iih3973s

iih3973s2#

-E-z使用GNU sed,这将从发布的示例输入(当然是不同输入的YMMV)中产生预期的输出:

$ sed -Ez 's/\n\s+/ /g; s/\n(.)/\1/g; s/></>\n</g' input.txt
<UndefineProperty name="admin.admin.adapters"/>-->
<!--<AddToProperty name="admin.admin.adapters"value="abc^abc.xz=abc"/>-->
<Property name="admin.admin.adapters" ride="true" targetFile="file/path/file.txt" value="abc,xz=abc,xz=com^abc.com.xz=abc,ac=com"/>
<ConfigurationRef xlink:href="file/path/file.xconf"/>
<ConfigurationRef xlink:href="file1.xconf"/>
<ConfigurationRef xlink:href="file2.xconf"/>
<Property name="ac.abc.Password" ride="true" targetFile="file/path/abc.properties" value="ac.abc.encryptedPassword"/>
<Property name="ac.pqr.Protocol" ride="true" targetFile="file/pqr.properties" value="https"/>

相关问题