Как удалить записи, начинающиеся с «chr1», но оставить записи с «chr11» или «chr19»?

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

<<< Hey > text.txt cat text.txt

Heyотправляется на стандартный ввод cat в виде строки. text.txtоткрывается для записи и усекается. Так что, если бы в нем был какой-то текст, он бы исчез.

catвыполняется с аргументом text.txt. Поскольку в качестве аргумента был указан файл, стандартный ввод игнорируется, поэтому Heyне используется. text.txtбыл усечен, поэтому, когда catпроходит через аргумент text.txt, выводить нечего, поэтому text.txt, который является стандартным выводом catчерез перенаправление, продолжает оставаться пустым.

1
06.08.2020, 06:09
2 ответа

Похоже, что после chr1 есть пробелы или табуляция. Таким образом, вы можете искать chr1, за которым следуют некоторые пробельные символы. Попробуйте это:

grep -v "chr1\s\+"
4
18.03.2021, 23:14

Во-первых, вы должны привязать свое регулярное выражение к совпадению только в начале строки (^chr1), чтобы избежать поиска строк, содержащих chr1, но не являющихся первой строкой (, это может легко произойти с аннотированным Файл VCF, например ). Далее вы можете использовать опцию -wдля (GNU )grep:

.
   -w, --word-regexp
          Select  only  those  lines  containing matches that
          form whole words.  The test is  that  the  matching
          substring  must  either  be at the beginning of the
          line,  or  preceded  by  a   non-word   constituent
          character.  Similarly, it must be either at the end
          of the line or followed by a  non-word  constituent
          character.     Word-constituent    characters   are
          letters, digits, and the underscore.   This  option
          has no effect if -x is also specified.

Если ваш grepне поддерживает это, используйте это:

grep -v '^chr1\s' file

\sсоответствует пробелу (, включая табуляцию и пробелы ), поэтому исключаются все строки, начинающиеся с chr1, а затем любые символы пробела.

6
18.03.2021, 23:14

Теги

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