Мой входной файл похож на это:
IDno="1"
Name=Jack
Type=Student
IDno="2"
Name=Jill
Type=Teacher
Я использую sed для извлечения всего IDno и типа только, когда тип является студентом.
sed -e '/IDno=/b' -e '/Type=Student/b' d
Это получает меня все строки со студентом типа, но не IDnos.
Я хочу добраться
IDno="1"
Type=Student
IDno="2"
но я добираюсь
Type=Student
Что я делаю неправильно?
egrep
может получить несколько строк из файла. Используя канал |
как разделитель можно вытянуть столько различных критериев, сколько Вы хотите. egrep
эквивалент grep -E
. egrep
сценарий, найденный в /bin
папка с содержанием, указывающим exec grep -E "$@"
.
Пример:
egrep "IDno=|Type=Student" inputfile
или
grep -E "IDno=|Type=Student" inputfile
Должен произвести:
IDno="1"
Type=Student
IDno="2"
Hope это помогает!
С помощью sed
для печати определенных строк проще использовать опцию -n
и команду p
:
sed -rn '/IDno=|Type=Student/p'
Или:
sed -n -e '/IDno=/p' -e '/Type=Student/p'
Опция -n
подавляет вывод, если явно не печатается. Команда p
, конечно, печатает совпадающие строки.
Кажется, что оригинальный вопрос задает «извлечь все IDno и тип только тогда, когда type является учеником. » Но выходные данные примера возвращают все строки IDno =, так что это довольно противоречивы ...
Вот ответ, который возвращает IDno и Type только тогда, когда Type = Student.
sed -n 'N;N;/IDno=.*Type=Student/p' filename | grep -v "^Name="
Небольшое объяснение:
-n, --quiet, --silent
подавить автоматическую печать пространства шаблона N;N;
Считывание / добавление следующей строки ввода в пространство шаблона. (дважды) /IDno=.*Type=Student/p
найти и amp; печатать из IDno = to Type = Student | grep -v "^Name="
не показывать строку Name = Мне не нравится sed | grep, но я не слишком уверен, как get sed для повторного поиска в выходных данных, и канал обычно говорит: «Возьми этот вывод и сделай что-нибудь» ... Может также выполнить grep | sed
grep -v "^Name=" t | sed -n 'N;N;/IDno=.*Type=Student/p'
awk
:
Установка разделителя полей как =
, и печать записей, которые содержат Type=Student
как целая запись или IDno
как первое поле:
awk -F= '$1=="IDno" || $0=="Type=Student"'
perl
:
Печать строк, которые запускаются с IDno
сопровождаемый =
, или запустите с Type
, сопровождаемый a =
и конец в Student
:
perl -ne 'print if /^(IDno=|Type=Student$)/'
Пример:
% cat file.txt
IDno="1"
Name=Jack
Type=Student
IDno="2"
Name=Jill
Type=Teacher
% awk -F= '$1=="IDno" || $0=="Type=Student"' file.txt
IDno="1"
Type=Student
IDno="2"
% perl -ne 'print if /^(IDno=|Type=Student$)/' file.txt
IDno="1"
Type=Student
IDno="2"