从文件中的记录中选择字符串

从文件中的记录中选择字符串

我有一个包含记录的文件。记录格式如下:

Record: XXXXXX [
{variable number of lines and content}
]

在记录中的某个点,可能有一个以

Start to do this thing

我想提取记录号以及记录中与“开始”一词匹配的行

目前我正在使用

egrep "Record|Start" inputfile.txt >> outputfile.txt

但我必须手动删除RecordStart匹配的匹配行。理想情况下,我希望这一步就能完成。我将不胜感激任何建议。

答案1

awk解决方案:

样本input.txt文件:

Record: 111111 [
text
test
Start to do this thing
text
]
Record: 222222 [
{variable number of lines and content}
]
Record: 333333 [
text
text
text
Start to do another thing
text
]

工作:

awk '/^Record: .*\[$/{ f=1; n=$2 }/^\]/{f=0}f && /^Start/{ print n, $0 }' input.txt

输出:

111111 Start to do this thing
333333 Start to do another thing

答案2

使用您的示例文件,连续重复三次并进行修改:

Record: XXXXXX [
{variable number of lines and content}
Start to do this thing
]
Record: YYYYYY [
{variable number of lines and content}
Stop doing this thing
]
Record: ZZZZZZ [
{variable number of lines and content}
Start again
]

然后:

$ awk '/^Record:/ { r = $2 } /^Start/ { print r ":", $0 }' file
XXXXXX: Start to do this thing
ZZZZZZ: Start again

当我们看到以 开头的行时,我们只需拾取记录编号/标签Record:并将其保存在变量中r。然后,当我们找到以 开头的行时,Start我们打印找到的任何记录标签和该行。

如果线路没有开始对于Start,您可能需要将正则表达式更改为 ,/^Start//^ *Start/允许单词和行开头之间有任意数量的空格。

如果有的话这将会失败其他文件中的事物之间的记录相匹配Start

相关内容