gpt4 book ai didi

macos - 使用 sed 编辑多行文本

转载 作者:行者123 更新时间:2023-12-04 04:47:53 27 4
gpt4 key购买 nike

我在 Mac OS X 上(使用 Apple sed 而不是 GNU sed)并且我有一个包含这样文本的文件。

            <key>wolf die se0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die se0001.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die w0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>

我想复制粘贴一些部分并修改 key ,使文件如下所示:
        <key>wolf die se0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf stand se0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die se0001.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die w0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf stand w0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>

所以,我正在尝试使用这样的 sed 命令来达到预期的效果(test.plist 是包含第一段文本的文件):
sed -E -n '
1h
1!H
$ {
g
s/(<key>wolf die )([a-z]{1,2})(0000)(.*<\/dict>)/\1\2\3\4\n<key>wolf stand \2 0000\4/
p
}
' test.plist

我没有得到想要的结果。我希望它在看到第一个 标签后终止并进行替换,然后进行后续操作,但是我的 sed 专业知识很难实现这一点。

我得到的实际输出是:
            <key>wolf die se0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die se0001.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die w0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>n<key>wolf stand se 0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die se0001.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>
<key>wolf die w0000.bmp</key>
<dict>
<key>frame</key>
<string>{{288,224},{44,68}}</string>
</dict>

我该如何纠正?

PS:我也没有得到这个 Apple sed 的换行符,但我认为这应该是一个小修复

最佳答案

使用适当的 XML 处理工具,例如xsh :

open file.xml ;

for //key[contains(., 'wolf die')][contains(., '0000')] {
$n := xcp . after ./following-sibling::dict[1] ;
set $n/text() xsh:subst(., ' die ', ' stand ') ;
xcp ./following-sibling::dict[1] after $n ;
}

save :b ;

关于macos - 使用 sed 编辑多行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com