Выведите строку, соответствующую строке ‘pattern’, исключая ‘pattern’

#regex #linux

#регулярное выражение #linux

Вопрос:

У меня есть следующие строки в текстовом файле ‘file.txt ‘

 String1 ABCDEFGHIJKL
String2 DCEGIJKLQMAB
 

Я хочу напечатать символы, соответствующие ‘String1’ в другом текстовом файле ‘text.txt » вот так

 ABCDEFGHIJKL
 

Здесь я не хочу использовать какие-либо номера строк. Есть предложения по использованию команды ‘sed’?. Я пытался использовать между ‘string 1’ и ‘string 2’, но не смог получить команду, исключающую ‘string1’. Этот следующий код для исключения только ‘string2’.

 sed -n '/^string1/,/^string2/{p;/^string2/q}' file.txt | sed '$d' > text.txt
 

Ответ №1:

 awk '$1=="String1" { print $2 }' file.txt > text.txt
 

Если первое поле, разделенное пробелом, равно «String1», выведите второе поле. Перенаправить вывод на text.txt .

Комментарии:

1. Спасибо за ваше предложение. Предположим, если мне нужно напечатать всю строку, а не только второе поле, как я могу изменить этот код?

2. просто используйте { print } вместо { print $2}

3. Спасибо вам за быстрый ответ!. В этом смысле при использовании { print } для строки он напечатал «string1 ABCDEFGHIJKL». Только одно последнее уточнение, предположим, если у меня есть строка — «string1 ABC DEF GHI JKL», и я хочу напечатать строку, используя приведенную выше команду, чтобы получить только «ABC DEF GHI JKL», исключая string1. Как я могу изменить?

4. awk ‘$1== «String1» { gsub(«string1″,»»,$0);print $0 }’ file.txt > text.txt

5. Если решение соответствует вашим потребностям, пожалуйста, найдите время, чтобы проголосовать и принять ответ.

Ответ №2:

Используйте GNU grep :

 grep -Po 'String1s K.*' in_file
 

Здесь grep используются следующие параметры:
-P : Используйте регулярные выражения Perl.
-o : Выводите только совпадения (по 1 совпадению на строку), а не все строки целиком.

K : Заставьте механизм регулярных выражений «сохранить» все, что было сопоставлено до K , и не включать его в соответствие. В частности, игнорируйте предыдущую часть регулярного выражения при печати соответствия.

СМОТРИТЕ ТАКЖЕ:
grep руководство
perlre — регулярные выражения Perl