0

尝试在 win10 上使用 gnu sed v4.7 重新格式化 xlm 文件中的标签(射击我)。sed位于路径中并从命令提示符运行。需要使用 . 转义一些 Windows 命令行字符^

源文件

BEGIN
...
   <trn:description>V7906 03/11 ALFREDOCAMEL HATSWOOD 74564500125</trn:description>
...
END

(行首有三个空格。)

预期输出:

BEGIN
...
   <trn:description>V7906 03/11 Alfredocamel Hatswood 74564500125</trn:description>
...
END

我想要标题大小写,但这确实是小写:

sed -i 's/^<trn:description^>\(.*\)^<\/trn:description^>$/^<trn:description^>\L\1^<\/trn:description^>/g' sourcefile

此命令更改为 Title Case

sed 's/.*/\L^&/; s/\w*/\u^&/g' sourcefile

这可以作为一个单一的线组合在一起以就地编辑原始源文件吗?


我想使用 sed,因为它在系统上可用并且代码结构一致。我知道我应该使用像 xmlstarlet 这样的工具,如下所述:

sed ... 代码无法区分谈论 sessionId 标签和真实 sessionId 标签的评论;无法识别元素编码;无法处理标签上出现的意外属性;等等

4

1 回答 1

0

感谢惠而浦论坛成员的回答和讨论

在 sed 中“在标签内”实现模式匹配太难了,而且文件格式正确,因此更改了所需的行:

sed -i.bak '/^<trn:description^>/s/\w\+/\L\u^&/g; s/^&.*;\^|Trn:Description/\L^&/g' filename

解释

  • 就地编辑保存带有.bak扩展名的原始文件
  • 选择包含的行<trn:description>
  • 一个或多个单词
  • 用大写替换第一个字符,用小写替换其余字符
  • 选择以or开头&和结尾的字符串;Trn:Description
  • 通过用小写替换字符来恢复代码
  • 源/目标filename

注意:^是 windows 转义字符,在其他实现中不需要

于 2020-05-24T09:27:08.370 回答