我需要使用 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>