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.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...