我有一个makefile(Makefile.inc),它列出了目录中的.c文件。
#
# Makefile.inc
#
..
unknown number of lines
..
LIB_FOO_BAR_SRCS = \
a.c \
f.c \
k.c \
m.c \
z.c
..
unknown number of lines
..
我想写一个简短的脚本,每次运行时都会用新的.c文件更新Makefile.inc。脚本的输入将是源和Makefile.inc的位置。
实施例: 将s.c和b.c添加到源目录并运行脚本后,Makefile.inc应该从上面提到的更新到下面的那个:
#
# Makefile.inc
#
..
unknown number of lines
..
LIB_FOO_BAR_SRCS = \
a.c \
b.c \
f.c \
k.c \
m.c \
s.c \
z.c
..
unknown number of lines
..
几个条件:
我找到了一种方法来获取_SRCS并获取行号。 我还格式化了要添加的列表。
#!/bin/bash
TAB=$'\t'
MAKEFILE_PATH="PATH/TO/Makefile.inc"
SRC_PATH="PATH/TO/FOO_BAR/SRC"
Line=$(grep -n -m 1 "SRCS" $MAKEFILE_PATH | cut -f1 -d: | sort)
echo $Line
list_src=$(ls -p "$SRC_PATH"/*.c | xargs -n1 basename | sed "s/^/${TAB}/" | sed 's/$/ \\/' | sed '$ s/.$//')
echo $list_src
输出:
15
a.c \
b.c \
f.c \
k.c \
m.c \
s.c \
z.c
现在,困难的部分。如何在行号$ Line后删除现有列表并附加新列表($ list_src)?
答案 0 :(得分:0)
awk
救援!
$ awk -v nl="${newlist}" '!f; $1~/^LIB_.*_SRCS$/{f=1; print nl} !NF{f=0}' file
将使用给定参数将模式LIB_.*_SRCS
之间的行替换为空行。