Regex求助:提取XML中Column节点属性为单行格式的实现方法
问题背景
现有结构如下的XML文件:
<Column sourceColumn="Column1" targetColumn="COLUMN1" /> <Column sourceColumn="Column2" targetColumn= />
需要得到如下格式输出,将每个Column节点的sourceColumn和targetColumn属性放在同一行,中间可用空格或下划线分隔:
sourceColumn="Column1"_targetColumn="COLUMN1" sourceColumn="Column2"_targetColumn=
之前尝试的处理命令如下,输出结果不符合预期:
cat file.xml | grep "sourceColumn=\|targetColumn=" |tr '\n' ' ' | sed 's/sourceColumn=/\nsourceColumn=/g' >> file1.txt
解决方案
原有命令的问题是替换所有换行后会残留XML节点闭合标记、多余空白字符,没有对属性行做专门的清理拼接,所以输出不符合要求。
推荐用更简单稳定的awk命令实现需求:
awk '/sourceColumn=/{ # 保存sourceColumn行,先去掉前后空白 s = $0 gsub(/^[[:space:]]+|[[:space:]]+$/,"",s) } /targetColumn=/{ # 清理targetColumn行前后空白 gsub(/^[[:space:]]+|[[:space:]]+$/,"",$0) # 下划线分隔输出,要空格分隔就把"_"换成" " print s "_" $0 }' file.xml > file1.txt
执行后生成的file1.txt就是符合要求的结果。
内容的提问来源于stack exchange,提问作者danio900409
相关产品推荐
相关产品推荐

