使用RegEx或Bash脚本重构

使用RegEx或Bash脚本重构,bash,Bash,我想通过深入嵌套的目录中的文件运行,并将其中的一部分更改为其他内容。 例如,我想在一个文件中更改任何具有 className={styles.badgeRight} 到 我可以手动执行此操作,但是有数千个文件,所以脚本或某些正则表达式就可以了。我将如何实现这一目标 几乎只需在点后面取任何内容,并将其用引号括起来,然后删除JSX括号和单词style即可对文件进行简单的就地“sed”编辑。这将创建备份文件(将“.bak”添加到原始名称)。为了避免这种情况,只需将-i.bak替换为-i: find

我想通过深入嵌套的目录中的文件运行,并将其中的一部分更改为其他内容。 例如,我想在一个文件中更改任何具有

className={styles.badgeRight}

我可以手动执行此操作,但是有数千个文件,所以脚本或某些正则表达式就可以了。我将如何实现这一目标

几乎只需在点后面取任何内容,并将其用引号括起来,然后删除JSX括号和单词
style

即可对文件进行简单的就地“sed”编辑。这将创建备份文件(将“.bak”添加到原始名称)。为了避免这种情况,只需将
-i.bak
替换为
-i

find . -type f -exec sed -i.bak 's/className={styles\.\([^}]*\)}/className="\1"/' {} +
对文件进行简单的就地“sed”编辑即可。这将创建备份文件(将“.bak”添加到原始名称)。为了避免这种情况,只需将
-i.bak
替换为
-i

find . -type f -exec sed -i.bak 's/className={styles\.\([^}]*\)}/className="\1"/' {} +

首先使用
find
命令列出所有文件,并将其存储在
list\u of_file.txt
文件中

 find /your/directory/path/*.txt > list_of_file.txt
 # change file extension type from txt to your own type example *.java
现在使用
while循环
并使用
sed
命令修改脚本

 while read file
 do
     sed -i.bak 's/className={styles\.\([^}]*\)}/className="badgeRight"/g' $file
 done < list_of_file.txt
读取文件时
做
sed-i.bak的/className={styles\.\([^}]*\)}/className=“badgeRight”/g'$file
完成
首先使用
find
命令列出所有文件,并将其存储在
list\u of_file.txt
文件中

 find /your/directory/path/*.txt > list_of_file.txt
 # change file extension type from txt to your own type example *.java
现在使用
while循环
并使用
sed
命令修改脚本

 while read file
 do
     sed -i.bak 's/className={styles\.\([^}]*\)}/className="badgeRight"/g' $file
 done < list_of_file.txt
读取文件时
做
sed-i.bak的/className={styles\.\([^}]*\)}/className=“badgeRight”/g'$file
完成
这并不是仅限于badgeRight,而是要将点后面的任何内容都用引号括起来。@brandNew,我已经修改了我的答案,它对您有效。完成了匹配“样式”之后的任何字符串所需的更新。并在最终文本中使用该字符串。这仍然会为每个文件调用一次sed,因此会非常慢。最好使用xargs(它调用一个
sed
命令,并在命令行中包含尽可能多的文件名),或者使用
find
-exec
选项和尾部的
+
。此外,您还需要在命令行中引用“$file”,以防它包含空格等。这不是仅限于badgeRight,而是用于获取点后面的任何内容并用引号将其括起来。@brandNew,我已经修改了我的答案,它将适用于您。已完成所需的更新,以匹配“样式”之后的任何字符串并在最终文本中使用该字符串。这仍然会为每个文件调用一次sed,因此会非常慢。最好使用xargs(它调用一个
sed
命令,并在命令行中包含尽可能多的文件名),或者使用
find
-exec
选项和尾部的
+
。此外,您还需要在命令行中引用“$file”,以防它包含空格等。您尝试过什么?如果你没有包括人们可以测试解决方案的样本输入和预期输出,就很难知道你的目标是什么。并包含您自己的代码!这不是一个分发的论坛,我们真的想帮助你修复你自己的代码。瞄准目标,你是对的。我明白了。我认为我的问题很清楚,不需要示例代码,或者至少我提供的示例已经足够了。@simon3270回答正确。有些问题很清楚,不需要被不必要的代码弄乱。你试过什么?如果你没有包括人们可以测试解决方案的样本输入和预期输出,就很难知道你的目标是什么。并包含您自己的代码!这不是一个分发的论坛,我们真的想帮助你修复你自己的代码。瞄准目标,你是对的。我明白了。我认为我的问题很清楚,不需要示例代码,或者至少我提供的示例已经足够了。@simon3270回答正确。有些问题很清楚,不需要被不必要的代码弄乱。非常感谢。我已经更新了答案,将“-exec”上的“\;”改为“+”——这将对许多文件运行一个“sed”,而不是对每个文件运行一次。有1000个文件。或者我原来的“xargs”就可以了。非常感谢。我已经更新了答案,将“-exec”上的“\;”改为“+”——这将对许多文件运行一个“sed”,而不是对每个文件运行一次。有1000个文件。或者我原来的“xargs”就可以了。