Удалить строки совпадающие со строками с другого файла

Есть файл test1.txt и файл test2.txt, оба состоят из строк со случайными символами. Но некоторые строки совпадают и в файле test1.txt и в файле test2.txt

Пример:

$ cat test1.txt 
случайные_символы1
случайные_символы2
случайные_символы3
случайные_символы4
!@#%^%&^*^
8246****

$ cat test2.txt 
случайные_символы1
!@#%^%&^*^
8246****
случайные_символы20

Хочу получить файл test1.txt с результатом:

случайные_символы2
случайные_символы3
случайные_символы4

Нашел решение вида:

sed -i -f <(sed 's,^,/^,;s,$,/d,' test2.txt) test1.txt

Выдает ошибку:

sed: file /dev/fd/63 line 3: Invalid preceding regular expression

Я так понял ругается на строку 8246****

Как сделать так, чтоб можно было обрабатывать любую строку, не зависимо, какие символы находятся в ней? Либо может есть другое решение задачи?


Решение: с файлами меньше 1GB, отлично подошли ответы от 'Эникейщик'

Т.к у меня файлы намного больше - подошло вот это:

comm -2 -3 test1.txt test2.txt

Ответы (1 шт):

Автор решения: Эникейщик

Можно считать оба файла в списки (через readlines(), например), из списков сделать множества и вычесть второе из первого:

file1 = ["случайные_символы1","случайные_символы2","случайные_символы3","случайные_символы4","!@#%^%&^*^","8246****"]

file2 = ["случайные_символы1","!@#%^%&^*^","8246****","случайные_символы20"]

s1 = set(file1)
s2 = set(file2)
print (s1-s2)

Вариант для очень больших файлов:

with open("text2.txt") as file2:
    data2 = f1.readlines()
    s2 = set(data1)
s1 = []
with open("text1.txt") as file1:
    for line in file2:
        if line not in s2:
            s1.append(line)
print(s1)

Считываем второй файл целиком, а первый потом читаем построчно и проверяем на наличие строчки во втором файле.

→ Ссылка