我有以下文件:
some lines = \
some params
SUBDIRS = \
text1 \
text2 \
# commented text
text3 \
text4 \
OTHERS = \
other text here \
我想提取一个包含text1
,text2
,text3
,text4
的列表。
我该怎么办?
答案 0 :(得分:1)
这将提取SUBDIRS之后但在OTHERS之前的所有行,不包括以#
开头或为空的行:
$ awk '/OTHERS/{f=0} f && /./ && !/^#/{print} /SUBDIRS/{f=1}' file
text1 \
text2 \
text3 \
text4 \
这个程序使用一个变量f
:当我们处于所需的行范围内时f为1而其他地方为0。
/OTHERS/{f=0}
如果我们已达到OTHERS
,则将f
设置为零。
f && /./ && !/^#/{print}
如果f
非零(f
)且该行不为空(/./
)且,则该行不从#
(!/^#/
)开始,然后打印此行。
/SUBDIRS/{f=1}
如果我们到达包含SUBDIRS
的行,则将f
设置为1.
因为print
是未指定操作时的默认操作,我们可以从脚本中省略它:
$ awk '/OTHERS/{f=0} f && /./ && !/^#/; /SUBDIRS/{f=1}' file
text1 \
text2 \
text3 \
text4 \
这将删除尾随\
并将所有输出组合成一行:
$ awk '/OTHERS/{f=0} $NF=="\\"{$NF=""} f && /./ && !/^#/{a=a" "$0} /SUBDIRS/{f=1} END{print a}' file
text1 text2 text3 text4
答案 1 :(得分:0)
试试这个。我希望SPACE_TAB显然是一个空格加一个标签。
Module