我有一个文件目录树,需要循环遍历并重新格式化各行。我可以用它做这个吗?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
当你需要在多条生产线上工作时,awk想想看,这比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