微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

macos – 为什么这些简单的shell命令在sed的替换部分中使用时会失败

在试图找到 this sed question的答案时,我想出了一个我无法理解的奇怪行为.

假设我有一个名为data的文件

$> cat data
foo.png
abCd.png
bar.png
baZ.png

任务是使用sed in line将所有带有大写ASCII字符的行替换为小写.所以输出应该是:

$> cat data
foo.png
abcd.png
bar.png
baz.png

解决方案应该适用于非gnu sed,就像在Mac上的sed一样

我试图将这个嵌入式awk变成sed的替换部分:

sed -E 's/[^ ]*[A-Z][^ ]*.png/'$(echo \&|awk '{printf("<%s>[%s]",$0,tolower($0))}')'/' data

奇怪的是,这输出了:

foo.png
<abCd.png>[abCd.png]
bar.png
<baZ.png>[baZ.png]

正如你所看到的那样,sed正在拾取带有大写字母的正确行,并且这也达到了awk,但awk的tolower()函数失败并产生相同的文本作为输入.

shell专家可以解释这种奇怪的行为.

sed 'y/ABCDEFGHIJKLMnopQRSYUVWXYZ/abcdefghijklmnopqrstuvwxyz/'

原文地址:https://www.jb51.cc/bash/384224.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐