我是这个论坛的新手,这是我的第一个问题,希望我不是重复的东西。
我需要在C文件中替换以下字符串,并且我为此目的使用了Sed。
输入:
#define N_MAX_ITEMS 20 // some comment
#define N_TOTAL_COUNT 10
预期产出:
N_MAX_ITEMS = 20
N_TOTAL_COUNT = 10
输入可以有多个或单个空格或标签。
我在MAKEfile中使用以下sed命令,在Cygwin环境中执行。
macros_$(HW_TYPE).ini: macros_temp.h
rm -f $@
sed -e "s/\(#define[ \t]*\) \(N_.*\) \([\s\t]*[A-Z0-9_(].*\)/\2=\3/" <$^ >>$@
但输出不正确,特别是对于附加了注释的表达式。
一般的想法是,我的sed应该能够选择不同的单词,直到遇到第一个空格或标签。
答案 0 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/^#define\s+(\S+)\s+(\S+).*/\1 = \2/' file
将元字符\s
和\S
用于空白和非空白,并将+
元字符用于一个或多个。