对于myfolder中提供的一组java文件,我想替换:
ColorTee.testh = new TestH(A,"JavaFileName".class);
ColorTee.testh.addFile(C,"/folder1/folder2/folder3/file","myFile")
使用:
ColorTee.testh = new TestH(Z,A,"JavaFileName".class);
ColorTee.testh.addFile(C,/folder3/file,"myfile");
知道“myfile”与文件不同
并在
之后添加import com.soft.test.event;
import java.io.File;
并尝试:
#!/bin/bash
for file in *.java
do
echo
sed -i -e "" "$file"
done
答案 0 :(得分:1)
未经测试,我不知道帖子中是否有错误但是/ folder3 / file似乎在java中无效
perl -i.bak -pe '
s/ColorTee\.testh = new TestH\(A,B\);/ColorTee.testh = new TestH(Z,A,F);/;
s^ColorTee\.testh\.addFile\(C,"/folder1/folder2/folder3/file","myFile"\)^ColorTee.testh.addFile(C,/folder3/file,"myfile");^;
s/import java.io.File;/import java.io.File;\nimport com.soft.test.event;/;
' *.java
-i.bak =>将备份* .java.bak中的原始文件删除.bak命令以禁用备份
答案 1 :(得分:1)
使用follow shell命令替换它。我不知道你的模式是否一直保持不变。你可以随意更改替换部分。
用替换字符串替换模式:
sed -e s/repexpr/replacement string/ "$file".bak >> "$file";
用于添加可以使用的换行符
sed '/import java.io.File;/a\import com.soft.test.event;' "$file"
就像。
for file in *.java
do
mv "$file" "$file".bak
sed -e s/TestH\(A/TestH\(Z,A/ "$file".bak >> "$file"
mv "$file" "$file".bak
sed '/import java.io.File;/a\import com.soft.test.event;' "$file".bak >> "$file"
rm "$file".bak
done
抱歉,但我不知道如何使用多行更换。
你可以做两次。
答案 2 :(得分:0)
没有特别的困难:
for file in *.java
do
sed -i.bak -e \
"s#import java.io.File;#import java.io.File;\nimport com.soft.test.event;#;s#ColorTee.testh = new TestH(A,\"JavaFileName\".class);#ColorTee.testh = new TestH(Z,A,\"JavaFileName\".class);#g;s#ColorTee.testh.addFile(C,\"/folder1/folder2/folder3/file\",\"myFile\")#ColorTee.testh.addFile(C,/folder3/file,\"$file\");#g" "$file"
done
答案 3 :(得分:0)
这将按照您的要求进行
use strict;
use warnings;
use Tie::File;
my $dir = 'myfolder';
opendir my $dh, $dir or die $!;
my @files = map "$dir/$_", grep /.java$/, readdir $dh;
my @lines = (
'ColorTee.testh = new TestH',
'ColorTee.testh.addFile',
'import java.io.File',
);
do { s/\s+/\\s+/g; s/\./\\./g; } for @lines;
for my $file (@files) {
tie my @text, 'Tie::File', $file or die $!;
for (my $i = 0; $i < $#text; $i++) {
if ($text[$i] =~ /$lines[0]/ and $text[$i+1] =~ /$lines[1]/) {
$text[$i] =~ s/\(A,\s*"JavaFileName"/(Z,A,"JavaFileName"/;
$text[$i+1] =~ s|folder1/folder2/folder3/|folder3/|;
$i += 2;
}
elsif ($text[$i] =~ /$lines[2]/) {
splice @text, $i+1, 0, 'import com.soft.test.event;';
$i += 1;
}
}
untie @text;
print "$file updated\n";
}