将 sed 用于混合大小写标记

Use sed for Mixed Case Tags

尝试在 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

我想要 Title Case 但这确实适合小写:

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

This command changes to Title Case:

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

是否可以将其合并为一行以就地编辑原始源文件?


我想使用 sed,因为它在系统上可用,而且代码结构一致。我知道我 正如所解释的那样:

sed ... code can't distinguish a comment that talks about sessionId tags from a real sessionId tag; can't recognize element encodings; can't deal with unexpected attributes being present on your tag; etc.

感谢 Whirlpool 论坛成员的 answer and discussion

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

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

说明

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

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