微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-使用bash脚本/ grep / sed以便用文件名本身替换类名

我目前有一个包含大量.java文件的目录,所有文件都具有不同的名称.即. name.java,name2.java,name3.java

我正在尝试编写一个脚本,该脚本循环遍历目录中的所有文件,并更改其类名(在文件内部)以匹配文件名本身.

当前,所有.java文件都包含类名称MyCritter.我想将每个文件中MyCritter的所有实例更改为特定Java文件本身的名称.我编写了一个脚本来尝试替换所有MyCritter术语,但是输出没有任何变化.在为文件的名字打印回显行之后,代码被冻结:

#!/bin/bash

dir1="/Users/path to folder"
subs=`ls $dir1`
for a in $subs;
do
  echo a
  [ -f "$a" ]
  grep -lr "MyCritter" * | xargs sed “s/MyCritter/$a/g”
done

输出到终端:name.java->然后无限循环/陷入困境

上面的代码一次打印目录中第一个文件名称,但随后被卡住.当我将第二行更改为此时:[-f“ $a”] ||继续,它贯穿整个代码,但是无法更新文件.

我尝试了grep的其他变体,包括

grep -lr -e "MyCritter" * | xargs sed -i “s/MyCritter/$a/g”
grep -lr -e "MyCritter" . | xargs sed -i “s/MyCritter/$a/g”
grep -lr -e "MyCritter" . | xargs sed “s/MyCritter/$a/g”

我主要是使用这个网站来指导我的:http://isaacsukin.com/news/2013/06/command-line-tip-replace-word-all-files-directory

向正确方向的任何推动将不胜感激!

解决方法:

如果您不需要脚本形式的解决方案,请在终端中,将cd转到包含* .java文件的目录,然后使用以下命令:

for f in *.java; do sed -i "s/MyCritter/"${f%.*}"/g" "$f"; done

sed命令的“ ${f%.*}”部分返回不带扩展名的文件名,并使用它替换MyCritter.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐