c - 使用 sed 检测和连接多行结构

标签 c unix sed

所以,假设我在一段代码中有这样的某种类型的数据结构:

struct apple {
    int type, color;
    Apple app;
};

// ... more code

我想获取完整的结构定义(以及文件中的任何其他结构定义)并将它们压缩成一行(因此文件产品看起来像这样:

struct apple { int type, color; Apple app; };

).

这是家庭作业的一部分。不到一周前,我刚刚在讲座中学习了 sed,但我不确定如何做这样的事情。因此,如果您对直接回答问题感到不自在,如果您能为我指明正确的方向,以便我可以学习如何正确使用此实用程序,我将不胜感激。

我假设可以通过检测结构定义来使用 sed 完成任务,然后继续将每一行读入全局缓冲区,直到找到 }(我假设结构定义中没有 union 或任何内容).虽然这个程序似乎有很多功能,但我找不到任何关于它的精彩介绍。

最佳答案

我会按照以下方式做一些事情:

$ sed -n '/struct/,/};/p' input | sed -e ':a;N;$!ba;s/\n//g'
struct apple {    int type, color;    Apple app;};

构造 /foo/,/bar/ 选择模式之间的所有行(包括)。

N 命令将换行符和下一行附加到当前模式空间。然后执行著名的 s/// 命令,它将换行符替换为空,即行连接。

关于c - 使用 sed 检测和连接多行结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692359/

相关文章:

c - 不通过命令行写入文本文件

C 堆栈分配大小

C网络编程?

c - 服务器编程错误

regex - sed ubuntu vs mac 正则表达式

c - 如何在 C 中声明一组常量函数指针?

有人能给我一个 C 回调函数的具体例子吗?

linux - 可以使用未添加到选择集中的描述符调用 FD_ISSET 吗?

值超过 9 的 SED 命令问题

regex - 重复正则表达式替换为 SED