I have file
with
denm.xyz
denm.abc
denm.def
denm_xyz
denm_abc
denm_def
I want to extract the ones with .
in it.
I tried
grep "denm\.*" file
grep 'denm\.*' file
sed "/denm\.*/p" file
sed '/denm\.*/p' file
These things пахал matching everything in the file
However using awk
awk '/denm\./' file
worked!!
How do I do same using grep
or sed
Вы были близки, просто необходимо удалить *
, что означает нуль или больше соответствия предыдущего маркера, .
в этом случае. В результате эти demn_
также, показал в результате, поскольку он соответствовал условию нуля .
.
, Таким образом, можно сделать:
grep 'denm\.' file.txt
Так же в sed
:
sed -n '/denm\./p' file.txt
Примечание, которое Вы пропустили -n
опция sed
без него sed
, распечатает все строки также.
Там также столько находятся на одном уровне точности, может быть добавлен для получения точно, что Вы хотите в сложных случаях, но берете ее в качестве запуска.
Пример:
% grep 'denm\.' file.txt
denm.xyz
denm.abc
denm.def
% sed -n '/denm\./p' file.txt
denm.xyz
denm.abc
denm.def
\.*
означает "любое количество случаев символа .
", включая нуль. Так как Ваши подчеркнутые имена файлов запускаются с denm
сопровождаемый нулевыми случаями символа .
, они подобраны. grep "denm\." file
будет работать.
Если все, в чем Вы нуждаетесь, является строками, которые имеют .
в них, использовал grep с фиксированными строками вместо регулярных выражений:
grep -F . file
От man grep
:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
С фиксированными строками, все специальные символы регулярного выражения теряют свое значение.
sed
не имеет соответствующей опции.
Я склонен использовать скобки вместо обратных косых черт для выхода:
egrep "denm[.].*" file
sed -r 's/denm[.]/.../'
Это сохраняет меня усилие по размышлению, если и как я должен выйти из обратных косых черт. (Финал .*
избыточен здесь.)