【发布时间】:2018-11-19 14:33:47
【问题描述】:
这个命令有什么作用?可以缩短而不丢失功能吗?
echo "abcabcabc" | sed "s/aBc/xyZ/gi;s/Z/a/;s/c/CCC/g" | xargs ls -ld
【问题讨论】:
-
我投票决定将此问题作为题外话结束,因为您可以运行该命令并查看它的作用。
这个命令有什么作用?可以缩短而不丢失功能吗?
echo "abcabcabc" | sed "s/aBc/xyZ/gi;s/Z/a/;s/c/CCC/g" | xargs ls -ld
【问题讨论】:
如果您在 Mac OS 终端上输入该命令,您就会知道该命令的作用。它除了产生错误之外什么也没做,因为 sed 命令中的 i 似乎是错误的或输入错误。不过
echo "abcabcabc" | sed "s/aBc/xyZ/g;s/Z/a/;s/c/CCC/g" | xargs ls -ld
输出字符串 abcabcabc,该字符串用作 sed 命令的输入,该命令将 aBc 替换为 xyZ,将 Z 替换为 a,将 c 替换为 CCC。这导致字符串 abCCCabCCCabCCC 再次输入 ls -ln 命令。如果您在当前目录中有一个名为 abCCCabCCCabCCC 的文件,则会找到该文件并显示其详细信息,否则输出为
ls: abCCCabCCCabCCC: No such file or directory
是否可以缩短取决于您真正想要实现的目标。
echo "abcabcabc" | sed "s/c/CCC/g" | xargs ls -ld
在这种情况下会有相同的结果。
【讨论】:
i 修饰符是一个 GNU 扩展,它使 sed 以不区分大小写的方式匹配(Perl 也支持)。