澄清'sed'的用法

时间:2013-02-13 11:31:15

标签: sed

我只是盲目地按照教程中的命令一次重命名几个文件夹。任何人都可以解释作为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

3 个答案:

答案 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
当你对输出感到满意时,

摆脱“回声”。