使用sed和awk有些麻烦

时间:2012-03-24 22:56:17

标签: bash unix sed awk

现在我有些麻烦。我找到了解决一个问题的方法。我在树中有一些文件,其名称是stdout-captured,stderr-captured和status-capture,我必须将这些文件重命名为stdout-expected,stderr-expected和status-expected。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

根据我们能够辨别的这个问题,您尝试创建一个程序化规则来重命名以扩展程序stdout-capturedstderr-capturedstatus-captured结尾的文件(假设一个错字)分别以扩展名stdout-expectedstderr-expectedstatus-expected结尾的文件。显然,如果这些定义中的每一个都只包含一个文件,则死记硬背mv可能更合适。

要使用sed执行所需的翻译,只需在/bin/bash中调用以下内容,并将所需目标作为当前工作目录:

EXTENSION=stdout-captured
REPLACEMENT=stdout-expected
for arg in $(ls *.$EXTENSION); \
  do mv $arg $(echo $arg | sed s/\\.$EXTENSION/.$REPLACEMENT/); \
  done

...其中为您要检测和替换的每个案例定义了$EXTENSION$REPLACEMENT。假设文件名的其余部分中没有任何文件包含.$EXTENSION。此解决方案不需要awk

要在多个目录之间递归调用此方法,请考虑将ls替换为find并相应地更新规则。请注意,find has its own facilities也可以对找到的资源执行操作。