Тестирование регулярного выражения из стандартного ввода с помощью grep | sed | awk

параметры ядра должны быть в форме

xxxxx=yyyy

без пробелов в xxxxx или yyyy . По моему опыту, кавычки / экранирование также не могут использоваться. Таким образом,

modprobe.blacklist=radeon fglrx

будет проанализирован как modprobe.blacklist = radeon и еще один параметр ядра 'fglrx', который будет проигнорирован, поскольку он не будет распознан как допустимый параметр.

7
31.05.2017, 02:58
2 ответа

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

$ grep -oE '[aeiou]+' -
This is a test  < input
i               > output
i               > output
a               > output
e               > output
whaaaat?        < input
aaaa            > output

Используйте Ctrl-D для отправки EOF и завершения потока.

Однако я не верю, что вы можете сделать то же самое, чтобы использовать стандартный ввод для переключателя -f, который считывает список шаблонов из файла. Однако, если у вас много шаблонов для текста в одном корпусе, вы можете:

grep -f needle-patterns haystack.txt

где needle-patterns — файл открытого текста с одним регулярным выражением в строке.

6
27.01.2020, 20:16

Определите следующую функцию в вашей оболочке (вы можете просто ввести ее или поместить в свой ~/.bashrc):

testregex() {
  [ "$#" -eq 1 ] || return 1
  while IFS= read -r line; do
    printf '%s\n' "$1" | grep -Eoe "$line"
  done
}

Затем вы можете протестировать регулярное выражение следующим образом:

$ testregex 'This is a line'
This            <--input
This            <--output
This?.*         <--input
This is a line  <--output
slkdjflksdj     <--input with no output (no match)
s.*             <--input
s is a line     <--output
$               <--I pressed Ctrl-D to end the test
8
27.01.2020, 20:16

Теги

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