如何在特定令牌后搜索和替换空行?

时间:2011-12-12 15:42:29

标签: command-line replace newline token

我希望在包含关键字的行后删除换行符,例如像修饰符private:public:protected:来完成我们的编码标准。我需要一个命令行工具(Linux),所以如果需要用户交互,请不要使用Notepad ++,Emacs,VS或Vim解决方案。换句话说,我想做一个:

sed -i 's/private:\s*\n\s*\n/private:\n/g'

我见过这个question但是无法将其扩展到我的需要。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望删除包含private:public:protected:的行后面的空行。

sed ':loop;/private:\|public:\|protected:/{n;/^$/d;Tloop}' inputfile

说明:

  • :loop创建标签
  • /private:\|public:\|protected:/将搜索包含该模式的行。
  • n;/^$/d将加载下一行(n),检查它是否为空行(/^$/),如果是,则删除该行(d )。
  • 如果没有匹配(行不为空),则
  • Tloop分支到标签loop

我不是大师,可能有更优雅的方法来做到这一点。在awk,perl,python等等中也可能有更优雅的方法。

答案 1 :(得分:0)

perl -0777 -pi -e 's/([ \t\r]*)(private|protected|public):[ \t\r]*\n[ \t\r]*\n/$1$2:\n/g' file

应该做的伎俩,同时也考虑尾随和领先的空白,我没有在问题中指明,因为这不是必须要求。