Именно по этой причине. В этом случае не следует уклоняться от скобок.
Одиночные кавычки '
уже говорят оболочке не беспокоиться о содержимом строки, поэтому она передается буквально в sed. Побег из скобки говорит sed ожидать окончания \)
в качестве разделителя для подрегекса.
Сначала: желаемый результат должен быть :
y2 x2
y4 x4
y5 x5
y6 x6
поскольку "x3 y3" и "x1 y1" присутствуют в обоих файлах
, чтобы получить строки, которые присутствуют только в file1, можно просто сделать
grep -v -f file1 file2
Из man-страницы
-v
--invert-match
Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.)
-f file
--file=file
Obtain patterns from file, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)
Попробуйте следующее:
awk '{if($1>$2) print $2 " " $1; else print $0;}' file1.txt file2.txt | sort -u > out.txt
это выведет:
x1 y1
x2 y2
x3 y3
x4 y4
x5 y5
x6 y6
awk
просто переупорядочивает столбцы в алфавитном порядке, sort -u
(уникальный) удаляет повторяющиеся строки.