Linux 搜寻及;替换为包含文件夹名称的多个文件
我有多个名称为的文件夹:Linux 搜寻及;替换为包含文件夹名称的多个文件,linux,perl,sed,terminal,find,Linux,Perl,Sed,Terminal,Find,我有多个名称为的文件夹: 1_1,1_2,...,2_1,..., 每个文件夹都包含名称为file.sh的相同文件。该文件的格式如下: 作业名称=名称 分区=长 我想在终端(Linux)中对我的所有文件夹使用搜索和替换命令,例如下面的 find . -type f -name "file.sh" -print |xargs sed -i 's/job_name/REPLACED_TEXT/g' 在被替换的文本的位置,我想要文件夹的名称。例如,在文件夹1_1中,将有文件.sh文件,其格式为:
1_1,1_2,...,2_1,...,
每个文件夹都包含名称为file.sh
的相同文件。该文件的格式如下:
作业名称=名称
分区=长
我想在终端(Linux)中对我的所有文件夹使用搜索和替换命令,例如下面的
find . -type f -name "file.sh" -print |xargs sed -i 's/job_name/REPLACED_TEXT/g'
在被替换的文本的位置,我想要文件夹的名称。例如,在文件夹1_1
中,将有文件.sh
文件,其格式为:
作业名称=1\u 1
分区=长
我还没有找到解决办法 您没有指定可能需要遍历多少子目录,例如
./1_1/file.sh
./1_2/file.sh
./a/b/c/1_1/file.sh
因此,我将假设一个子目录如下:
./1_1/file.sh
./1_2/file.sh
像下面这样的东西应该可以让你开始,而不是测试,只是把它写在我的头上。它是bash脚本编写的,但您可以将其转换为一个大而长的命令。确保首先备份目录,以防脚本产生不可预测的结果
for i in `find . -type f -print "file.sh"`;
do
subdir=`echo $i | awk -F\/ '{print $2}'`
sed -e s/job_name=NAME/jobname=$subdir/ $i > $i.bak
mv $i.bak $i
done
您可以尝试此行打印所有要执行的
sed
命令:
find . -type f -name 'file.sh' | \
sed 's=\(.*\)/\([^/]*\)=sed -i "s/NAME/\1/" \"&\"='
对于我们找到的每个文件,它提取其目录的名称,并创建一个sed
命令,该命令能够用它替换name
。输出应该类似于:
sed -i "s/NAME/1_1/" "1_1/file.sh"
sed -i "s/NAME/1_2/" "1_2/file.sh"
然后,如果您觉得不错,可以对sed
重复使用e
命令,这将使外部sed
执行其结果(即内部sed
命令),如下所示:
find . -type f -name 'file.sh' | \
sed 's=\(.*\)/\([^/]*\)=sed -i "s/NAME/\1/" \"&\"=e'
# 'e' command added here -------------------------^