我需要使用sed而不是所有行来修改ksh脚本中的文件吗?

时间:2019-05-30 10:26:00

标签: file sed sh ksh

我有一个file.pc(Pro c),当从Windows传递过来时,与Linux有一些兼容问题。因此,我试图创建一个脚本来以我需要的格式对文档进行形式化,但是我遇到了//注释的格式问题。问题是: 我需要将所有以//开头的注释替换为/ * / comments 我已经做完了,但是我有一个简单的问题,在某些文件中,我将//注释到/ * /注释中,例如下面的示例:

/*

// 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    

1 个答案:

答案 0 :(得分:1)

此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*$/\/\* $1 \*\// and $content[$_].="\n";
    }
    open $fh, '>', $file;
    print $fh @content;
    close $fh;
}

要执行它,将内容插入文件并在ksh命令行中写入。

perl <name_of_script>.pl <files>