我只是盲目地按照教程中的命令一次重命名几个文件夹。任何人都可以解释作为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
答案 0 :(得分:1)
-e选项的参数是一个由两个命令组成的脚本。第一个是p
,它打印未掺杂的输入,第二个是标准的全局替换。所以对于输入ar1
,这应该输出
ar1
AR1
这个技巧的另一部分是xargs上的-n2选项,它强制它一次只使用两个参数(而不是它可以处理的数量,这会产生非常不同的结果)。
答案 1 :(得分:1)
sed
脚本(-e
选项后面的位)可以包含多个命令,以;
示例中的脚本使用p
命令打印模式空间(即刚从输入读取的行),然后使用s
命令在模式空间上执行替换。 / p>
默认情况下(除非清除模式空间或为sed指定-n
选项)处理完每一行后,将再次打印当前模式空间行,因此将打印替换结果。
编写相同内容的另一种方法是:
sed -e "p" -e "s/ar/AR/g"
这将命令分成两个脚本。另一种方式是:
sed "p;s/ar/AR/g"
因为如果sed的唯一参数是脚本,则不需要-e
选项
答案 2 :(得分: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
当你对输出感到满意时,摆脱“回声”。