Возможно, будет смысл немного изменить перенаправления:
<<< Hey > text.txt cat text.txt
Hey
отправляется на стандартный ввод cat в виде строки. text.txt
открывается для записи и усекается. Так что, если бы в нем был какой-то текст, он бы исчез.
cat
выполняется с аргументом text.txt
. Поскольку в качестве аргумента был указан файл, стандартный ввод игнорируется, поэтому Hey
не используется. text.txt
был усечен, поэтому, когда cat
проходит через аргумент text.txt
, выводить нечего, поэтому text.txt
, который является стандартным выводом cat
через перенаправление, продолжает оставаться пустым.
Похоже, что после chr1 есть пробелы или табуляция. Таким образом, вы можете искать chr1
, за которым следуют некоторые пробельные символы. Попробуйте это:
grep -v "chr1\s\+"
Во-первых, вы должны привязать свое регулярное выражение к совпадению только в начале строки (^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
, а затем любые символы пробела.