Diff на самом деле полностью игнорирует пробелы

Diff на самом деле полностью игнорирует пробелы

Я ищу приложение, которое будет сравнивать два файла и фактически игнорировать все пробелы, например:

class foo { 
  bar
  spaz 
}

равнозначно

class foo{bar spaz}

или, также

classfoo { 
  barspaz}

но нет

classfoo { 
  spazspaz
}

т.е. он покажет мне, что spazв предыдущем примере занял место barв любом из других примеров. Ему нужно сравнить только 2 файла.

  • Это может быть утилита, совместимая с Windows или Linux/Unix/Posix.
  • Я пробовал diff -wкоманду lin/unix, она игнорирует пробелы только если разницапострочнопробел. Я не вижу возможностиполностьюигнорировать пробелы.
  • Я также попробовал UECompare или Ultracompare, платную утилиту сравнения для Windows.

решение1

Вы ищете что-то вроде trкоманды? Вотстраницы руководства. Он входит в msysgit, cygwin, и gnuwin32 toolsнасколько я могу судить.

Таким образом, вы можете удалить все пробелы перед сравнением, выполнив что-то вроде:

tr --delete '[:space:]' <filename.txt

Затем вы можете передать вывод этой команды diffи заставить ее работать без пробелов.

Например, у меня есть файл с именем HelloWorldApp.java. Позвольте мне показать вам, как trон обрабатывается:

C:\temp>cat HelloWorldApp.java
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}
C:\temp>tr -d '[:space:]' <HelloWorldApp.java
classHelloWorldApp{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");//Displaythestring.}}

решение2

Несмотря на то, что они ориентированы на линию, диффмогбыть сделанным для выполнения того, что запрашивается. Грубо говоря, вы могли бы выполнить diff -w, а затем выполнить постобработку вывода diff. Он мог бы просмотреть вывод diff и объединить различные пары строк, чтобы увидеть, соответствуют ли они (теперь) строке в другом файле.

Кажется, это может быть O(n^2) или что-то в этом роде, но это все равно было бы очень полезно, если бы оно ограничивалось (скажем) отсутствием объединения, объединением 2 строк, объединением 3 строк в файле 1 X отсутствием объединения, объединением 2 строк, объединением 3 строк в файле 2 в движущемся «окне» вывода различий. (где X — это ~ «векторное произведение»)

На самом деле, похоже, что эту работу скрипт постобработки результатов сравнения Perl мог бы выполнить за несколько часов работы (в зависимости от ваших навыков программирования (Perl)).

Может быть, когда у меня есть какая-то задача, которую мне не очень хочется выполнять на работе... :-)

Связанный контент