Ответ 1
В awk
:
awk '$2 == "LINUX" { print $0 }' test.txt
Смотрите awk
по примеру для хорошего ввода в awk
.
В sed
:
sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt
См. sed
по примеру для хорошего ввода в sed
.
У меня
1 LINUX param1 value1
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4
Мне нужно awk для печати всех строк, в которых $2
есть LINUX
.
В awk
:
awk '$2 == "LINUX" { print $0 }' test.txt
Смотрите awk
по примеру для хорошего ввода в awk
.
В sed
:
sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt
См. sed
по примеру для хорошего ввода в sed
.
Попробуйте:
egrep -i '^\w+ LINUX ' myfile
awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile
sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile
изменить: изменено для нечувствительности к регистру
Это случай, когда вы можете использовать красивый идиоматический awk
:
awk '$2=="LINUX"' file
То есть:
awk
, когда в состоянии True выполняется печать текущей строки.$2 == "LINUX"
истинно, когда второе поле LINUX, это будет печатать те строки, в которых это происходит.Если вы хотите напечатать все те строки, соответствующие LINUX
независимо от того, верхний или нижний регистр, используйте toupper()
для использования все:
awk 'toupper($2)=="LINUX"' file
Или IGNORECASE
с любым из этих синтаксисов:
awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file
awk -v IGNORECASE=1 '$2=="LINUX"' file
В GNU sed
нечувствительные к регистру совпадения могут быть сделаны с помощью модификатора I
:
sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'
Будет устойчиво соответствовать "linux", "Linux", "LINUX", "LiNuX" и другие как второе поле (после первого поля, которое может быть любым несимметричным символом) и окружено любой суммой (по крайней мере один ) любого пробела (прежде всего пространства и вкладки, хотя вы можете использовать [:blank:]
, чтобы ограничить его строго).