sed 使用正则表达式删除

sed 使用正则表达式删除

我有包含以下代码

#ifdef CEEDLING_TESTS
void scheduler_task_delay_update(uint8_t task_index) {
#else
static void scheduler_task_delay_update(uint8_t task_index) {
#endif

我想删除除

void scheduler_task_delay_update(uint8_t task_index) {

所以我创建了一个脚本:

#!/bin/bash
echo $PWD
for f in $(find src/ -type f)
do
    sed -i '/#ifdef CEEDLING_TESTS/d' $f
    sed -i '/#else/d' $f
    sed -i '/#endif/d' $f
    sed -i '/^static/d' $f
done

99% 的情况下,这种方法都有效。除非我的代码开头是

static void run_task(uint8_t task_index) {

此代码未使用 包裹ifdef。如何使用 sed 和 regex 区分两者?

编辑:使用在线正则表达式解析器应该可以找到有问题的文本:

sed -i '/#ifdef CEEDLING_TESTS/d' $f
sed -i -E "s/#else.*static/temp/g" $f

编辑 2:找到一个例子这里,尝试重新创建:

sed -i -e 's/.*#else\(.*\)#endif.*/\1/' $f

答案1

我能够通过以下步骤做到这一点!

for f in src/**/*.c
do
    sed -i '/#ifdef CEEDLING_TESTS/d' $f
    sed -i '/#else/,/#endif/d' $f
done

相关内容