我正在寻找一个bash解决方案来删除一个代码片段,其中包含现在在java类中的/ * ... * / comments中被认为是多余的信息。
具体来说,以前当我们检查我们的代码时,它会自动在课程顶部附近添加一份检查历史记录的副本:
/* Copyright statement */
/*
* $Log:
* 3 Project1 02/02/2012 19:05:59 Bob Geldof
* Comment 3
* 2 Project1 01/02/2012 15:25:22 Sir Lancelot
* CR-12345
* 1 Project1 22/10/2011 12:15:31 Thomas the Tank Engine
* First implementation of that cool thing
* $
*/
package com.thing.place.blah
...
...
...
我们现在使用不同的工具来更好地显示这些信息,并且使用重用代码的项目之间的代码比较是一种痛苦,因为时间戳,注释等不同。
目前,如果我们处理一个文件,我们手动删除注释语句和生成该语句的$ Log:关键字,但是我想要做的是编写一个脚本来删除所有java文件。我很好用bash脚本在每个java文件上运行它,但是在正则表达式中有一些我不知道如何实现的技巧。
所以我猜工作流程就像
为了做到这一点,我更喜欢与sed兼容的正则表达式参数,因为这是我熟悉的使用,尽管我会采取你提供的任何东西!此外,如果进行多次传递是有意义的,例如“在开始标记和$ Log:之间删除”,“删除结束标记和$ Log:”,“删除$ Log:”这样就可以了。这是一次性过程,因此速度远不如准确性重要。
非常感谢任何建议。 米奇。
答案 0 :(得分:3)
以下内容可能适合您:
sed '/\/\*/!b;:a;/\*\//!{$!{N;ba}};{/$Log:/d}' filename
答案 1 :(得分:2)
#!/usr/local/bin/bash
set -x
find *.java -type f | while read files
do
cat "${files}" | \
sed s'@^/\* Copyright statement \*\/@garbage-begin@' | \
sed s'@ \*\/@garbage-end@' \
> "${files}"2.java
sed '/garbage-begin/,/garbage-end/d' "${files}"2.java > "${files}"3.java
mv -v "${files}"3.java "${files}"
done