【发布时间】:2017-03-02 15:20:54
【问题描述】:
我想删除文件中字符串/* 和*/ 之间的所有文本,其中字符串可能出现在不同的行并围绕注释。例如我想删除/*和*/之间的以下七行:
/* "CyIHTAlgorithm.pyx":81
* @cython.wraparound(False)
* @cython.cdivision(True)
* cdef inline object IHTReconstruction2D(fType_t[:,:] data, # <<<<<<<<<<<<<<
* fType_t[:,:] residualFID,
* fType_t[:,:] CS_spectrum,
*/
我已经设法使用 sed 做到这一点,其中字符串出现在同一行:
sed -i.bak 's/\(\/\*\).*\(\*\/\)/\1\2/' test.txt
但我不确定如何将其扩展到同一文件中的多行:
我也试过:
sed -i.bak '/\/\*/{:a;N;/\*\//!ba;s/.*\/\*\|\*\/.*//g}' test.txt 遵循这里的想法 (Extract text between two strings on different lines)
这会删除开头的/* 和*/,但不会删除中间的文本。
【问题讨论】:
-
查看您的 sed 版本是否有
-z选项,这将允许 NUL 成为行分隔符而不是换行符... -
如果您知道在您的评论开始或结束的同一行上永远不会有非评论代码,这并不难,但对于一般情况,这更痛苦。