Строковое различие в Bash

99
задан codeforester 6 October 2018 в 05:26
поделиться

3 ответа

Используя diff или com или независимо от того, что Вы хотите:

diff  <(echo "$string1" ) <(echo "$string2")

FAQ Bash Greg: Замена Процесса

или с именованным каналом

mkfifo ./p
diff - p <<< "$string1" & echo "$string2" > p

FAQ Bash Greg: Работа с Именованными каналами

Именованный канал также известен как FIFO

-, самостоятельно для стандартного входа.

<<< "здесь строка".

& похож ;, но помещает его в фоновом режиме

175
ответ дан Stefan van den Akker 24 November 2019 в 05:01
поделиться

Напоминает мне об этом вопросе: , Как может Вы разность два конвейера в Bash?

, Если Вы находитесь на сессии удара, Вы могли бы сделать a:

diff <cmd1 <cmd2
diff <(foo | bar) <(baz | quux)

с < создающие анонимные именованные каналы - управляемый ударом - таким образом, они создаются и уничтожаются автоматически, в отличие от временных файлов.

Поэтому, если Вам удается изолировать Ваши две различных строки как часть команды (grep, awk, sed...), можно сделать - например - что-то как:

diff < grep string1 myFile < grep string2 myFile

(если Вы предполагаете Вас, имеют в Ваших строках файла как string1=very_complicated_value и string2=another_long_and_complicated_value': не зная внутренний формат Вашего файла, я не могу рекомендовать точную команду)

15
ответ дан Community 24 November 2019 в 05:01
поделиться

Я предпочитаю функцию cmp и Process Substitution удара:

$ cmp -bl <(echo -n abcda) <(echo -n aqcde)
  2 142 b    161 q
  5 141 a    145 e

Высказывание относительно положения 2, b происходит для первого, но q для второго. В положении 5 происходит другое различие. Просто замените те строки переменными, и Вы сделаны.

13
ответ дан Johannes Schaub - litb 24 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: