Сценарий Bash Найти разницу между двумя строками - PullRequest
2 голосов
/ 11 июля 2010

Учитывая эти две строки:

"12345"
"1245"

Там, где первая является полной строкой, а во второй отсутствуют элементы первой, я хочу, чтобы она возвращала «3».

Так снова с:

"The ball is red"
"The is red"

Я хочу вернуть "мяч"

Я пробовал diff с:

diff <(echo "12345") <(echo "1245")

Но diff не дает желаемого результата. Комм не делает то, что я хочу.

Ответы [ 2 ]

4 голосов
/ 11 июля 2010

Я думаю, что comm - правильная команда:

comm -23 <(tr ' ' $'\n' <<< 'The ball is red') <(tr ' ' $'\n' <<< 'The is red')

или более гибкая:

split_spaces() { tr ' ' $'\n' <<< "$1"; }
split_chars() { sed $'s/./&\\\n/g' <<< "$1"; }
comm -23 <(split_spaces 'The ball is red') <(split_spaces 'The is red')
comm -23 <(split_chars 12345) <(split_chars 1245)
1 голос
/ 11 июля 2010

Использование только одного внешнего исполняемого файла:

a='The ball is red'
b='The is red'
join -v 1 <(echo "${a// /$'\n'}") <(echo "${b// /$'\n'}")

Использование join и grep в строках без пробелов:

a=12345
b=1245
join -v 1 <(echo "$a" | grep -o .) <(echo "$b" | grep -o .)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...