我有包含以下代码
#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