Извлечь строку, начинающуюся с определенного шаблона в sed

Диспетчер файлов> Изменить> Настройки> Поведение для исполняемых текстовых файлов. В Ubuntu он установлен для просмотра исполняемых файлов, когда они открыты

Я предпочитаю, чтобы он задавал «Спросить каждый раз», как предыдущая версия ubuntu.

1
задан 27 February 2017 в 09:44

3 ответа

С помощью sed для печати определенных строк проще использовать опцию -n и p:

sed -rn '/IDno=|Type=Student/p'

Или:

sed -n -e '/IDno=/p' -e '/Type=Student/p'
[d2 ] Параметр -n подавляет вывод, если явно не печатается. Команда p, конечно, печатает соответствующие строки.

4
ответ дан 23 May 2018 в 01:05
awk: установка разделителя полей как = и печать записей, которые содержат Type=Student в качестве всей записи, или IDno в качестве первого поля:
awk -F= '$1=="IDno" || $0=="Type=Student"'
perl: печать строк, которые запускаются с IDno, затем =, или начните с Type, а затем = и закончите в 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"
3
ответ дан 23 May 2018 в 01:05

Первоначальный вопрос, кажется, просит «извлечь все IDno и тип только тогда, когда type is student». Но результат вывода возвращает все строки 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 find & amp; print from IDno = to Type = Student | grep -v "^Name=" не показывает строку Name =

Мне не нравится sed | grep, но не слишком уверен, как заставить sed повторно искать его вывод , и труба обычно говорит: «Возьмите этот вывод и сделайте что-нибудь» ... Могли бы сделать grep | sed too

grep -v "^Name=" t | sed -n 'N;N;/IDno=.*Type=Student/p'
0
ответ дан 23 May 2018 в 01:05
  • 1
    Пример вывода поясняет это. – muru 27 February 2017 в 18:23
  • 2
    @muru Спасибо, я просто заметил, что тоже кажется ошибкой IMO либо в описании, либо в примере вывода. На самом деле я нашел ошибку и в моем ответе, вставив имя после ID ... Возможно, кто-то найдет этот ответ полезным в любом случае (особенно после / если я его исправлю), я все еще учился у него \ – Xen2050 27 February 2017 в 18:38
  • 3
    прочитайте его таким образом "(все IDno) и (тип только тогда, когда тип является студентом) " – muru 27 February 2017 в 19:07

Другие вопросы по тегам:

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