Уже много ответов, но ни один из них не идеален ИМХО. Ответ Танатоса оставляет несколько лишних символов в строке, а ответ Сорпигала требует, чтобы файлы были отсортированы или предварительно отсортированы, что может быть недостаточно при любых обстоятельствах.
Я думаю, что лучший способ получить строки, которые отличаются и ничем иным (без дополнительных символов, без переупорядочения), это сочетание diff
, grep
и awk
(или аналогичных).
Если строки не содержат «<», короткая однострочная строка может быть: </p>
diff urls.txt* | grep "<" | sed 's/< //g'
но это удалит каждый экземпляр "<" (меньше, чем пробел) из строк, что не всегда нормально (например, исходный код). Самый безопасный вариант - использовать awk: </p>
diff urls.txt* | grep "<" | awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}'
Этот однострочный дифференциал обоих файлов, затем отфильтровывает вывод diff в стиле ed, а затем удаляет завершающий "<", который добавляет diff. Это работает, даже если строки содержат некоторые символы «<». </p>