我有包含的代码
#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 和正则表达式区分两者?
编辑:使用在线正则表达式解析器,这应该找到有问题的文本:
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