将文件各部分合并在一起

将文件各部分合并在一起

我有一个文件目录树,需要循环遍历并重新格式化各行。我可以用它做这个吗?sed结合寻找

对于每个文件,我需要调整文件中的文本

...
* @category Foo
* @package Bar
...

变成这样(删除@category行,但将值添加到包注释值的前面)

...
* @package Foo/Bar
...

最有效的方法是什么?需要修改几百个文件。

答案1

尝试这个:

sed '/@category/{s/.*@category /* @package /;N;s/\n.*@package /\//}'

要对整个树中的所有文件运行此操作,我会执行以下操作:

for i in $(find . -type f); do
   sed '/@category/{s/.*@category /* @package /;N;s/\n.*@package /\//}' $i > $i.new
   mv $i.new $i
done

答案2

这可能对你有用(GNU sed):

find . -type f -exec sed -ri '$!N;s/^\* @category (.*)\n(\* @package )(.*)/\2\1\/\3/;P;D' {} \;

答案3

当你需要在多条生产线上工作时,想想看,这比sed这样做更合适。

awk '/^\* +@package/{print $0"/"v;next} {if ($0 ~ /^\* +@category/){v=$3}else{print}}' file.txt

或分解:

awk '
    /^\* +@package/{
        print $0"/"v
        next
    }
    {
        if ($0 ~ /^\* +@category/){
            v=$3
        }
        else{
            print
        }
    }
' file.txt

相关内容