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/'

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...