如何使用空格在sed中定义拆分模式

如何使用空格在sed中定义拆分模式,sed,makefile,Sed,Makefile,我是新来这个论坛的,这是我的第一个问题,希望我没有重复的东西 我需要替换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).in

我是新来这个论坛的,这是我的第一个问题,希望我没有重复的东西

我需要替换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/" <$^ >>$@
macros\uu$(HW\u类型).ini:macros\u temp.h
rm-f$@
sed-e“s/\(#define[\t]*\)\(N.*\)\([\s\t]*[A-Z0-9(].*\)/\2=\3/”>$@
但是输出不正确,特别是对于附加了注释的表达式

一般的想法是,在遇到第一个空格或制表符之前,我的sed应该能够选择不同的单词。

这可能适合您(GNU sed):

将元字符
\s
\s
用于空格和非空格,将
+
元字符用于一个或多个空格

sed -r 's/^#define\s+(\S+)\s+(\S+).*/\1 = \2/' file