我有以下场景sed -n '/*SET_PART/,/*/p' Inputfile > Outputfile
因此,我正在搜索以包含“SET_PART”的行开始并以包含“"的行结束的段落。(在我的场景中,出现“*”总是新段落的符号)
示例:输入文件
*SET_PART_COLLECT_TITLE
Gesamtfahrzeug
101
1005043 1005049 1005101 1005102 1005103 1005200 1005300 1005400
1005504 1005601 1005700 1005800 1005900 1006000 1006100 1006101
1006102 1006103 1006200 1006201 1006202 1006203 1006400 1006401
1006402 1006500 1006600 1006700 1006800 1006900 1007000 1007100
1007200 1007201 1007202 1007203 1007204 1007300 1007301 1007302
1007303 1007304 1007305 1007306 1007307 1007308 1007309 1007310
1007311 1007312 1007313 1007314 1007400 1007500 1007600 1007700
1007800 1007801 1015700 1015800
*Keyword
202
1000000 1002002 1002312 1002313 1002323 1002701
*SET_PART_COLLECT_TITLE
Verbindungstechnik_Slave
201
1000000 1002002 1002312 1002313 1002323 1002701
*SET_PART_LIST_TITLE
Bord_stein_hi_Forcetransducer
3 0. 0. 0. 0.
3
*SET_PART_COLLECT_TITLE
*SET_PART_LIST_TITLE
Fahrbahn_Forcetransducer
1
1
*END
使用当前的命令行,我得到:输出文件
*SET_PART_COLLECT_TITLE
Gesamtfahrzeug
101
1005043 1005049 1005101 1005102 1005103 1005200 1005300 1005400
1005504 1005601 1005700 1005800 1005900 1006000 1006100 1006101
1006102 1006103 1006200 1006201 1006202 1006203 1006400 1006401
1006402 1006500 1006600 1006700 1006800 1006900 1007000 1007100
1007200 1007201 1007202 1007203 1007204 1007300 1007301 1007302
1007303 1007304 1007305 1007306 1007307 1007308 1007309 1007310
1007311 1007312 1007313 1007314 1007400 1007500 1007600 1007700
1007800 1007801 1015700 1015800
*Keyword
*SET_PART_COLLECT_TITLE
Verbindungstechnik_Slave
201
1000000 1002002 1002312 1002313 1002323 1002701
*SET_PART_LIST_TITLE
*SET_PART_COLLECT_TITLE
*SET_PART_LIST_TITLE
所需的输出为:(所有以“*SET_PART”开头的段落。)
*SET_PART_COLLECT_TITLE
Gesamtfahrzeug
101
1005043 1005049 1005101 1005102 1005103 1005200 1005300 1005400
1005504 1005601 1005700 1005800 1005900 1006000 1006100 1006101
1006102 1006103 1006200 1006201 1006202 1006203 1006400 1006401
1006402 1006500 1006600 1006700 1006800 1006900 1007000 1007100
1007200 1007201 1007202 1007203 1007204 1007300 1007301 1007302
1007303 1007304 1007305 1007306 1007307 1007308 1007309 1007310
1007311 1007312 1007313 1007314 1007400 1007500 1007600 1007700
1007800 1007801 1015700 1015800
*SET_PART_COLLECT_TITLE
Verbindungstechnik_Slave
201
1000000 1002002 1002312 1002313 1002323 1002701
*SET_PART_LIST_TITLE
Bord_stein_hi_Forcetransducer
3 0. 0. 0. 0.
3
*SET_PART_COLLECT_TITLE
*SET_PART_LIST_TITLE
Fahrbahn_Forcetransducer
1
1
插上话:我想匹配“”的下一个匹配项,但只打印到它出现的前一行。并且“”出现的行应该是搜索“*SET_PART”的下一个匹配项的行。这是在连续有多个“*SET_PART”段落的情况下。
我使用Gnome版本3.32.2,以防这是相关的。
对于这种情况,有没有比sed更好的工具?
谢谢你的帮忙
1条答案
按热度按时间vql8enpb1#
这可能对你有用(GNU sed):
这实际上是一个筛选操作,因此使用
-n
关闭隐式打印。找到包含
SET_PART
的行并开始循环。打印当前行,然后用下一行替换它。
如果该行包含
SET_PART
,则重新启动循环。如果该行包含
*
,则删除它并有效地结束循环。否则重复该循环。