#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