Это было немного сложно.Вот, пожалуйста.
grep -v -f <(sed -e 's/^\(.*\)$/\^>sp|\1|/' 1.txt) 2.txt | sed -ne '/^>/{p;n;p}'
Регулярные выражения (регулярные выражения) представлены в старом (а не пересмотренном / расширенном) стиле POSIX.Первое регулярное выражение /^\(.*\)$/
соответствует каждой строке 1.txt для изменения, например, P13674
на ^>sp|P13674|
.Последнее, как вы видите, соответствует началу строки в 2.txt .Вы можете опустить первый шаблон, просто набрав grep -v -f 1.txt 2.txt | sed ...
, и это все еще практически вероятно сработает.Я просто подумал, что точнее соответствовать началу строки.
Второе регулярное выражение, /^>/
, отличает строки, начинающиеся с >
, от тех, которые этого не делают, потому что эти два вида строк хотятразная обработка.
Кстати, я с тобой согласен.Решение Awk, вероятно, предпочтительнее.Однако, так как вы начали с Grep, мое решение последовало в том же духе.