0

我只是盲目地按照教程中的命令一次重命名多个文件夹。任何人都可以解释作为 sed 的 -e 选项参数给出的“p;s”的含义。

[root@LinuxD delsure]# ls
ar1  ar2  ar3  ar4  ar5  ar6  ar7
[root@LinuxD delsure]# find . -type d -name "ar*"|sed  -e "p;s/ar/AR/g"|xargs  -n2  mv
[root@LinuxD delsure]# ls
AR1  AR2  AR3  AR4  AR5  AR6  AR7
4

3 回答 3

1

-e 选项的参数是由两个命令组成的脚本。第一个是p,它打印纯粹的输入,第二个是标准的全局替换。所以对于输入ar1,这应该输出

ar1
AR1

这个技巧的另一部分是 xargs 上的 -n2 选项,它强制它一次只使用两个参数(而不是它可以处理的尽可能多的参数,这会产生非常不同的结果)。

于 2013-02-13T11:36:41.590 回答
1

一个sed脚本(选项后面的位-e)可以包含多个命令,由;

您示例中的脚本使用p命令打印模式空间(即刚从输入中读取的行),然后使用s命令对模式空间执行替换。

默认情况下(除非模式空间被清除或-n为 sed 提供了选项)在处理每一行后,当前模式空间行会再次打印,因此将打印替换的结果。

编写相同内容的另一种方法是:

sed  -e "p" -e "s/ar/AR/g"

这将命令分成两个脚本。另一种方法是:

sed "p;s/ar/AR/g"

因为如果 sed 的唯一参数是脚本,则-e不需要该选项

于 2013-02-13T11:43:37.207 回答
0

bash 中的一种方式:

$ ls
ar6  ar7

$ find . -name 'ar*' | while IFS= read -r file; do echo mv "$file" "${file^^}"; done
mv ./ar6 ./AR6
mv ./ar7 ./AR7

当您对输出感到满意时,请摆脱“回声”。

于 2013-02-13T22:22:30.990 回答