Ищите строку в строке и добавьте связанные строки

[118765] Одно является синонимом другого. См. [119177]:help S[119178]:

number_format
A string specifying how to format the data. It can be any of the following,
which you will notice have the same meanings as they do to perl's pack function:

C        - unsigned char
S        - unsigned 16-bit, native endianness
v or S<  - unsigned 16-bit, little-endian
n or S>  - unsigned 16-bit, big-endian
L        - unsigned 32-bit, native endianness
V or L<  - unsigned 32-bit, little-endian
N or L>  - unsigned 32-bit, big-endian
Q        - unsigned 64-bit, native endianness
Q<       - unsigned 64-bit, little-endian
Q>       - unsigned 64-bit, big-endian
*S*[119179]. ["x"] Удалить [считать] строки [в регистр x] и запустить вставка. Синоним "cc" |linewise|.[118768].
1
25.07.2014, 09:48
2 ответа

Если я правильно понял, я изменю not_string на вашем входе для проверки:

ID  number1 string                                                              
DS  item11                                                                      
DS  item12                                                                      
ID  number2 qwerty                                                               
DS  item21                                                                      
DS  item22                                                                      
ID  number3 string                                                              
DS  item31                                                                      
DS  item32

Попробуйте:

$ awk '/ID/ && !/string/{flag=0;next};/string/{flag=1};flag' file 
ID  number1 string
DS  item11
DS  item12
ID  number3 string
DS  item31
DS  item32
3
27.01.2020, 23:17
sed -n '/ID.* s/p;//,/ID/{//!p;}' <<\DATA                              
    ID  number1 string
    DS  item11
    DS  item12
    ID  number2 not_string
    DS  item21
    DS  item22
    ID  number3 string
    DS  item31
    DS  item32
DATA

Это зависит от этого POSIX, определенного поведения для sed адресов регулярных выражений:

Если RE пусто (то есть нет указан шаблон) sed должен вести себя так, как если бы последний RE, использованный в последней примененной команде (либо как / address / , либо как часть s / ubsti / tute / command) был указан.

Когда начало вашего поиска совпадает с адресом /ID.* s / , оно затем набирается p . Диапазон строк указывается между строками, соответствующими последнему адресу //, / ID / и следующей строке ID . Любые строки, попадающие в {в;} в диапазоне (или неполные, если они заканчиваются последней строкой) , которые соответствуют ! Not match // также p ритинг.

Все, что проходит, - это строки /ID.* s / , которые я явно p rint, и все строки, встречающиеся между этим и следующим встречающимся ] / ID / строка - или (включая) последняя строка, в зависимости от того, что наступит раньше.

ВЫХОД

ID  number1 string
DS  item11
DS  item12
ID  number3 string
DS  item31
DS  item32
2
27.01.2020, 23:17

Теги

Похожие вопросы