Извлечение определенной строки после заданной строки из файла HTML с использованием сценария bash

Хотя это не поможет в этом конкретном случае, некоторым адаптерам назначаются уникальные последовательные идентификаторы:

udevadm info -a -n /dev/ttyUSB1 | grep '{serial}'

Пример последовательного идентификатора адаптера:

  ATTRS{serial}=="A6008isP"`

и udev затем будет содержать:

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A6008isP", SYMLINK+="arduino"

Источник

5
задан 4 September 2017 в 00:13

30 ответов

Я не могу это разумно посоветовать, потому что синтаксический анализ html с регулярным выражением вряд ли закончится хорошо, но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

. Он работает нормально ваш образец в любом случае ...

Примечания

-n ничего не печатают, пока мы не попросим его -r использовать ERE /string/ найти строки с string s/old/new/ замените old на new .* любое количество любых символов ([^"]+), сохраните некоторые символы, которые не являются " \1 обратная ссылка на сохраненные символы p печатайте только строки, которые мы изменили
3
ответ дан 22 May 2018 в 18:49
  • 1
    Это действительно заметно, но мне просто нужна строка Manika, здесь m получает mANIKA \ nmANIKA & lt; / td & gt; & lt; br & gt; – Abhijeet Anand 4 September 2017 в 00:10
  • 2
    отлично работает, ты :) – Abhijeet Anand 4 September 2017 в 00:20

Я не могу это разумно посоветовать, потому что синтаксический анализ html с регулярным выражением вряд ли закончится хорошо, но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

. Он работает нормально ваш образец в любом случае ...

Примечания

-n ничего не печатают, пока мы не попросим его -r использовать ERE /string/ найти строки с string s/old/new/ замените old на new .* любое количество любых символов ([^"]+), сохраните некоторые символы, которые не являются " \1 обратная ссылка на сохраненные символы p печатайте только строки, которые мы изменили
3
ответ дан 18 July 2018 в 07:28

Я не могу это разумно посоветовать, потому что синтаксический анализ html с регулярным выражением вряд ли закончится хорошо, но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

. Он работает нормально ваш образец в любом случае ...

Примечания

-n ничего не печатают, пока мы не попросим его -r использовать ERE /string/ найти строки с string s/old/new/ замените old на new .* любое количество любых символов ([^"]+), сохраните некоторые символы, которые не являются " \1 обратная ссылка на сохраненные символы p печатайте только строки, которые мы изменили
3
ответ дан 24 July 2018 в 18:48

Я не могу это разумно посоветовать, потому что разбор html с регулярным выражением вряд ли закончится хорошо , но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Все равно работает на вашем образце ...

Примечания

  • -n ничего не печатают, пока мы его не попросим
  • -r использовать ERE
  • /string/ найти строки с string
  • s/old/new/ заменить old на new
  • .* любое число любых символов
  • ([^"]+) сохраняет некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p печатать просто линии, которые мы изменили
3
ответ дан 31 July 2018 в 21:54

Я не могу это разумно посоветовать, потому что разбор html с регулярным выражением вряд ли закончится хорошо , но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Все равно работает на вашем образце ...

Примечания

  • -n ничего не печатают, пока мы его не попросим
  • -r использовать ERE
  • /string/ найти строки с string
  • s/old/new/ заменить old на new
  • .* любое число любых символов
  • ([^"]+) сохраняет некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p печатать просто линии, которые мы изменили
3
ответ дан 2 August 2018 в 15:09

Я не могу это разумно посоветовать, потому что разбор html с регулярным выражением вряд ли закончится хорошо , но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Все равно работает на вашем образце ...

Примечания

  • -n ничего не печатают, пока мы его не попросим
  • -r использовать ERE
  • /string/ найти строки с string
  • s/old/new/ заменить old на new
  • .* любое число любых символов
  • ([^"]+) сохраняет некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p печатать просто линии, которые мы изменили
3
ответ дан 3 August 2018 в 19:15

Я не могу это разумно посоветовать, потому что разбор html с регулярным выражением вряд ли закончится хорошо , но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Все равно работает на вашем образце ...

Примечания

  • -n ничего не печатают, пока мы его не попросим
  • -r использовать ERE
  • /string/ найти строки с string
  • s/old/new/ заменить old на new
  • .* любое число любых символов
  • ([^"]+) сохраняет некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p печатать только линии, которые мы изменили
3
ответ дан 5 August 2018 в 04:03

Я не могу это разумно посоветовать, потому что разбор html с регулярным выражением вряд ли закончится хорошо , но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Все равно работает на вашем образце ...

Примечания

  • -n ничего не печатают, пока мы его не попросим
  • -r использовать ERE
  • /string/ найти строки с string
  • s/old/new/ заменить old на new
  • .* любое число любых символов
  • ([^"]+) сохраняет некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p печатать просто линии, которые мы изменили
3
ответ дан 6 August 2018 в 21:03

Я не могу это разумно посоветовать, потому что разбор html с регулярным выражением вряд ли закончится хорошо , но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Все равно работает на вашем образце ...

Примечания

  • -n ничего не печатают, пока мы его не попросим
  • -r использовать ERE
  • /string/ найти строки с string
  • s/old/new/ заменить old на new
  • .* любое число любых символов
  • ([^"]+) сохраняет некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p печатать просто линии, которые мы изменили
3
ответ дан 9 August 2018 в 01:32

Я не могу это разумно посоветовать, потому что разбор html с регулярным выражением вряд ли закончится хорошо , но вы можете получить строку MANIKA с

sed -nr '/MOM:/ s/.*MOM:([^"]+).*/\1/p' file

Все равно работает на вашем образце ...

Примечания

  • -n ничего не печатают, пока мы его не попросим
  • -r использовать ERE
  • /string/ найти строки с string
  • s/old/new/ заменить old на new
  • .* любое число любых символов
  • ([^"]+) сохраняет некоторые символы, которые не являются "
  • \1 обратная ссылка на сохраненные символы
  • p печатать только линии, которые мы изменили
3
ответ дан 14 August 2018 в 19:41
grep -Po 'MOM:\K[^"]+' file.html

Предупреждение: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 22 May 2018 в 18:49

В строке, которую вы ищете, всегда есть MOM:, но вы не сказали, что она всегда имеет " после нее. В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они называются символами слов в терминологии регулярных выражений. Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

Я эхо слова символов , Zanna's и [d3 ] регулярные выражения мудрые предупреждения о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на Zanna's [!d6 ], и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1.

-o печатает только совпадения, а не целую строку. -P использует PCRE, который поддерживает \K, чтобы удалить текст, сопоставленный до сих пор, поэтому он не включается в возвращенный согласованный текст. -m 1 останавливается после согласования шаблона один раз. Таким образом, вы назначаете только первое совпадение переменной, а не несколько совпадений, разделенных символами новой строки.

Обратите внимание, что вы также можете добавить -m1 к команде в ответе JJoao, поэтому он использует только совпадения из первой строки, в которой есть.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все. Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это похоже на ответ JJoao [!d21 ].

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, I:

-o выводит только совпадения, а не всю строку. [ ! d13] соответствует одному или нескольким символам слов (\w+) вместо символов до " ([^"]+) -P использует PCRE, который поддерживает \K, чтобы удалить текст, сопоставленный до сих пор, так что не включается в возвращенный возвращенный текст. использует более компактный синтаксис, позволяющий дважды записывать шаблон.

Для метода, который я использовал для этого, требуется GNU sed, но это реализация sed, предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений , этот метод sed дает вам все из них . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 22 May 2018 в 18:49

В строке, которую вы ищете, всегда есть MOM:, но вы не сказали, что она всегда имеет " после нее. В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они называются символами слов в терминологии регулярных выражений. Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

Я эхо слова символов , Zanna's и регулярные выражения мудрые предупреждения о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на Zanna's , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1.

-o печатает только совпадения, а не целую строку. -P использует PCRE, который поддерживает \K, чтобы удалить текст, сопоставленный до сих пор, поэтому он не включается в возвращенный согласованный текст. -m 1 останавливается после согласования шаблона один раз. Таким образом, вы назначаете только первое совпадение переменной, а не несколько совпадений, разделенных символами новой строки.

Обратите внимание, что вы также можете добавить -m1 к команде в ответе JJoao, поэтому он использует только совпадения из первой строки, в которой есть.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все. Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA JANE

С sed

Это похоже на ответ JJoao .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, I:

-o выводит только совпадения, а не всю строку. [ ! d13] соответствует одному или нескольким символам слов (\w+) вместо символов до " ([^"]+) -P использует PCRE, который поддерживает \K, чтобы удалить текст, сопоставленный до сих пор, так что не включается в возвращенный возвращенный текст. использует более компактный синтаксис, позволяющий дважды записывать шаблон.

Для метода, который я использовал для этого, требуется GNU sed, но это реализация sed, предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений , этот метод sed дает вам все из них . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 18 July 2018 в 07:28
grep -Po 'MOM:\K[^"]+' file.html

Предупреждение: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 18 July 2018 в 07:28

В строке, которую вы ищете, всегда есть MOM:, но вы не сказали, что она всегда имеет " после нее. В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они называются символами слов в терминологии регулярных выражений. Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

Я эхо слова символов , Zanna's и регулярные выражения мудрые предупреждения о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на Zanna's , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1.

-o печатает только совпадения, а не целую строку. -P использует PCRE, который поддерживает \K, чтобы удалить текст, сопоставленный до сих пор, поэтому он не включается в возвращенный согласованный текст. -m 1 останавливается после согласования шаблона один раз. Таким образом, вы назначаете только первое совпадение переменной, а не несколько совпадений, разделенных символами новой строки.

Обратите внимание, что вы также можете добавить -m1 к команде в ответе JJoao, поэтому он использует только совпадения из первой строки, в которой есть.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все. Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA JANE

С sed

Это похоже на ответ JJoao .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, I:

-o выводит только совпадения, а не всю строку. [ ! d13] соответствует одному или нескольким символам слов (\w+) вместо символов до " ([^"]+) -P использует PCRE, который поддерживает \K, чтобы удалить текст, сопоставленный до сих пор, так что не включается в возвращенный возвращенный текст. использует более компактный синтаксис, позволяющий дважды записывать шаблон.

Для метода, который я использовал для этого, требуется GNU sed, но это реализация sed, предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений , этот метод sed дает вам все из них . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 24 July 2018 в 18:48
grep -Po 'MOM:\K[^"]+' file.html

Предупреждение: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 24 July 2018 в 18:48

Перед вами всегда есть MOM:, но вы не сказали, что после нее она всегда имеет ". В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они известны как словальные символы в терминологии регулярных выражений . Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

I echo Дэвид Фостер , Zanna и JJoao's мудрым предупреждением о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на метод JJoao , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1 .

Обратите внимание, что вы также можете добавить -m1 к команде в Ответ JJoao , поэтому он использует только совпадения из первой строки с любым.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все они . Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это напоминает метод Занны .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, отличия в том, что I:

  • останавливается после первой строки, содержащей совпадение
  • соответствуют одному или нескольким символам слов (\w+) вместо символов до " ([^"]+)
  • потребляют ноль или более произвольных символов (.* ]) во-первых, чтобы MOM: не появлялся в самом начале строки
  • , используйте более компактный синтаксис, который позволяет избежать записи шаблона дважды.

Техника, которую я использовал для этого , требует GNU sed , но это реализация sed , предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений, этот метод sed дает вам только последний . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 31 July 2018 в 21:54
grep -Po 'MOM:\K[^"]+' file.html

Внимание: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 31 July 2018 в 21:54

Перед вами всегда есть MOM:, но вы не сказали, что после нее она всегда имеет ". В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они известны как словальные символы в терминологии регулярных выражений . Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

I echo Дэвид Фостер , Zanna и JJoao's мудрым предупреждением о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на метод JJoao , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1 .

Обратите внимание, что вы также можете добавить -m1 к команде в Ответ JJoao , поэтому он использует только совпадения из первой строки с любым.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все они . Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это напоминает метод Занны .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, отличия в том, что I:

  • останавливается после первой строки, содержащей совпадение
  • соответствуют одному или нескольким символам слов (\w+) вместо символов до " ([^"]+)
  • потребляют ноль или более произвольных символов (.* ]) во-первых, чтобы MOM: не появлялся в самом начале строки
  • , используйте более компактный синтаксис, который позволяет избежать записи шаблона дважды.

Техника, которую я использовал для этого , требует GNU sed , но это реализация sed , предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений, этот метод sed дает вам только последний . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 2 August 2018 в 15:09
grep -Po 'MOM:\K[^"]+' file.html

Внимание: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 2 August 2018 в 15:09

Перед вами всегда есть MOM:, но вы не сказали, что после нее она всегда имеет ". В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они известны как словальные символы в терминологии регулярных выражений . Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

I echo Дэвид Фостер , Zanna и JJoao's мудрым предупреждением о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на метод JJoao , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1 .

Обратите внимание, что вы также можете добавить -m1 к команде в Ответ JJoao , поэтому он использует только совпадения из первой строки с любым.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все они . Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это напоминает метод Занны .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, отличия в том, что I:

  • останавливается после первой строки, содержащей совпадение
  • соответствуют одному или нескольким символам слов (\w+) вместо символов до " ([^"]+)
  • потребляют ноль или более произвольных символов (.* ]) во-первых, чтобы MOM: не появлялся в самом начале строки
  • , используйте более компактный синтаксис, который позволяет избежать записи шаблона дважды.

Техника, которую я использовал для этого , требует GNU sed , но это реализация sed , предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений, этот метод sed дает вам только последний . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 3 August 2018 в 19:15
grep -Po 'MOM:\K[^"]+' file.html

Внимание: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 3 August 2018 в 19:15

Перед вами всегда есть MOM:, но вы не сказали, что после нее она всегда имеет ". В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они известны как словальные символы в терминологии регулярных выражений . Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

I echo Дэвид Фостер , Zanna и JJoao's мудрым предупреждением о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на метод JJoao , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1 .

Обратите внимание, что вы также можете добавить -m1 к команде в Ответ JJoao , поэтому он использует только совпадения из первой строки с любым.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все они . Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это напоминает метод Занны .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, отличия в том, что I:

  • останавливается после первой строки, содержащей совпадение
  • соответствуют одному или нескольким символам слов (\w+) вместо символов до " ([^"]+)
  • потребляют ноль или более произвольных символов (.* ]) во-первых, чтобы MOM: не появлялся в самом начале строки
  • , используйте более компактный синтаксис, который позволяет избежать записи шаблона дважды.

Техника, которую я использовал для этого , требует GNU sed , но это реализация sed , предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений, этот метод sed дает вам только последний . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 5 August 2018 в 04:03
grep -Po 'MOM:\K[^"]+' file.html

Внимание: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 5 August 2018 в 04:03

Перед вами всегда есть MOM:, но вы не сказали, что после нее она всегда имеет ". В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они известны как словальные символы в терминологии регулярных выражений . Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

I echo Дэвид Фостер , Zanna и JJoao's мудрым предупреждением о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на метод JJoao , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1 .

Обратите внимание, что вы также можете добавить -m1 к команде в Ответ JJoao , поэтому он использует только совпадения из первой строки с любым.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все они . Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это напоминает метод Занны .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, отличия в том, что I:

  • останавливается после первой строки, содержащей совпадение
  • соответствуют одному или нескольким символам слов (\w+) вместо символов до " ([^"]+)
  • потребляют ноль или более произвольных символов (.* ]) во-первых, чтобы MOM: не появлялся в самом начале строки
  • , используйте более компактный синтаксис, который позволяет избежать записи шаблона дважды.

Техника, которую я использовал для этого , требует GNU sed , но это реализация sed , предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений, этот метод sed дает вам только последний . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 6 August 2018 в 21:03
grep -Po 'MOM:\K[^"]+' file.html

Внимание: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 6 August 2018 в 21:03

Перед вами всегда есть MOM:, но вы не сказали, что после нее она всегда имеет ". В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они известны как словальные символы в терминологии регулярных выражений . Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

I echo Дэвид Фостер , Zanna и JJoao's мудрым предупреждением о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на метод JJoao , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1 .

Обратите внимание, что вы также можете добавить -m1 к команде в Ответ JJoao , поэтому он использует только совпадения из первой строки с любым.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все они . Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это напоминает метод Занны .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, отличия в том, что I:

  • останавливается после первой строки, содержащей совпадение
  • соответствуют одному или нескольким символам слов (\w+) вместо символов до " ([^"]+)
  • потребляют ноль или более произвольных символов (.* ]) во-первых, чтобы MOM: не появлялся в самом начале строки
  • , используйте более компактный синтаксис, который позволяет избежать записи шаблона дважды.

Техника, которую я использовал для этого , требует GNU sed , но это реализация sed , предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений, этот метод sed дает вам только последний . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 9 August 2018 в 01:32
grep -Po 'MOM:\K[^"]+' file.html

Внимание: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 9 August 2018 в 01:32

Перед вами всегда есть MOM:, но вы не сказали, что после нее она всегда имеет ". В целях этого ответа я предполагаю, что вы ищете строки, которым разрешено содержать любые буквенные символы нижнего или верхнего регистра, цифры или символы подчеркивания. Они известны как словальные символы в терминологии регулярных выражений . Соответствие таких «слов» текста достаточно полезно, что большинство диалектов регулярных выражений имеют функции, которые помогут сделать это. Если это не то, что вы хотите, вы можете соответствующим образом изменить это решение, или вы можете использовать методы в других ответах.

I echo Дэвид Фостер , Zanna и JJoao's мудрым предупреждением о разборе HTML с регулярным выражением и об этом не являемся надежными. Пожалуйста, будьте осторожны и подумайте, действительно ли то, что вы запросили, именно то, что вы хотите сделать. В вашем примере кода вы назначили путь к входному файлу переменной $file, поэтому я предполагаю, что это было сделано. Вы назначили вывод своей команды на $y, поэтому я сделаю то же самое.

С grep

Это похоже на метод JJoao , и вы также можете использовать этот метод с подстановкой команд, если регулярное выражение больше подходит для ваших нужд.

y="$(grep -oPm1 'MOM:\K\w+' "$file")"

-oPm1 - это более компактный способ записи -o -P -m 1 .

Обратите внимание, что вы также можете добавить -m1 к команде в Ответ JJoao , поэтому он использует только совпадения из первой строки с любым.

Если первая строка с совпадением содержит несколько совпадений, этот метод grep дает вам все они . Например, если эта строка MOM:MANIKA MOM:JANE"></td><br>, то $y будет удерживать значение:

MANIKA
JANE

С sed

Это напоминает метод Занны .

y="$(sed -rn '0,/.*MOM:(\w+).*/ s//\1/p' "$file")"

Помимо того, что в качестве замены команды заключены различия, отличия в том, что I:

  • останавливается после первой строки, содержащей совпадение
  • соответствуют одному или нескольким символам слов (\w+) вместо символов до " ([^"]+)
  • потребляют ноль или более произвольных символов (.* ]) во-первых, чтобы MOM: не появлялся в самом начале строки
  • , используйте более компактный синтаксис, который позволяет избежать записи шаблона дважды.

Техника, которую я использовал для этого , требует GNU sed , но это реализация sed , предусмотренная в Ubuntu.

Если первая строка с совпадением содержит несколько совпадений, этот метод sed дает вам только последний . Из MOM:MANIKA MOM:JANE"></td><br> вы получите:

JANE
1
ответ дан 14 August 2018 в 19:41
grep -Po 'MOM:\K[^"]+' file.html

Внимание: это не очень надежное решение; И ваш HTML недопустим

1
ответ дан 14 August 2018 в 19:41

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

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