我需要使用 sed 修改 ksh 脚本中的文件,但不是所有行?
I need to modify a file in ksh script using sed but not all the lines?
我有一个 file.pc (Pro c) 从 windows 传递过来时与 linux 有一些兼容问题。所以我尝试创建一个脚本来以我需要的格式形式化文档,但是,我遇到了替换 //
注释的问题。问题是:
我需要将所有以 //
开头的评论替换为 /* */
评论
我已经这样做了,但我有一个简单的问题,在某些文件中,我有 //
评论到 /* */
评论,如下例所示:
/*
// some comments
code;
code;
*/
所以当我用脚本替换它时,它看起来像这样:
/*
/* some comments */
code;
code;
*/
但是父亲评论的最后*/
给我一个错误,因为不能将两个*/
连接起来,所以最后一个*/
给了我一个错误。
我只需要替换不在 /* */
评论中的评论
并用单个 /*
替换其中的 //
for file in $(ls $path)
do
sed -i -e '/\/\// s/$/ *\//g' -e 's/\/\//\/* /g' $path/file
done
这个 Perl 脚本应该为它作为参数获取的每个文件完成这项工作。
use v5.10;
for my $file (@ARGV) {
-f $file or warn "$file is not a plain file, ignoring..." and next;
open my $fh, '<', $file;
my @content = <$fh>;
close $fh;
my $comment = 0;
for (keys @content) {
$comment or $content[$_] =~ /\/\*/ and $comment = 1;
$comment and $content[$_] =~ /\*\// and $comment = 0;
$comment or $content[$_] =~ s/\/\/\s*(.*?)\s*$/\/\* \*\// and $content[$_].="\n";
}
open $fh, '>', $file;
print $fh @content;
close $fh;
}
要执行它,请将内容插入文件并在 ksh 命令行中写入。
perl <name_of_script>.pl <files>
我有一个 file.pc (Pro c) 从 windows 传递过来时与 linux 有一些兼容问题。所以我尝试创建一个脚本来以我需要的格式形式化文档,但是,我遇到了替换 //
注释的问题。问题是:
我需要将所有以 //
开头的评论替换为 /* */
评论
我已经这样做了,但我有一个简单的问题,在某些文件中,我有 //
评论到 /* */
评论,如下例所示:
/*
// some comments
code;
code;
*/
所以当我用脚本替换它时,它看起来像这样:
/*
/* some comments */
code;
code;
*/
但是父亲评论的最后*/
给我一个错误,因为不能将两个*/
连接起来,所以最后一个*/
给了我一个错误。
我只需要替换不在 /* */
评论中的评论
并用单个 /*
//
for file in $(ls $path)
do
sed -i -e '/\/\// s/$/ *\//g' -e 's/\/\//\/* /g' $path/file
done
这个 Perl 脚本应该为它作为参数获取的每个文件完成这项工作。
use v5.10;
for my $file (@ARGV) {
-f $file or warn "$file is not a plain file, ignoring..." and next;
open my $fh, '<', $file;
my @content = <$fh>;
close $fh;
my $comment = 0;
for (keys @content) {
$comment or $content[$_] =~ /\/\*/ and $comment = 1;
$comment and $content[$_] =~ /\*\// and $comment = 0;
$comment or $content[$_] =~ s/\/\/\s*(.*?)\s*$/\/\* \*\// and $content[$_].="\n";
}
open $fh, '>', $file;
print $fh @content;
close $fh;
}
要执行它,请将内容插入文件并在 ksh 命令行中写入。
perl <name_of_script>.pl <files>