【发布时间】:2010-07-12 02:22:32
【问题描述】:
给定这两个字符串:
"12345"
"1245"
第一个是完整的字符串,第二个是第一个缺少的东西,我希望它返回“3”。
再说一遍:
"The ball is red"
"The is red"
我要回“球”
我尝试过 diff:
diff <(echo "12345") <(echo "1245")
但是 diff 没有给出想要的输出。 comm 也不符合我的要求。
【问题讨论】:
标签: bash
给定这两个字符串:
"12345"
"1245"
第一个是完整的字符串,第二个是第一个缺少的东西,我希望它返回“3”。
再说一遍:
"The ball is red"
"The is red"
我要回“球”
我尝试过 diff:
diff <(echo "12345") <(echo "1245")
但是 diff 没有给出想要的输出。 comm 也不符合我的要求。
【问题讨论】:
标签: bash
我认为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)
【讨论】:
comm -23 <(tr ' ' $'\n' <<< $a | sort) <(tr ' ' $'\n' <<< $b | sort)
comm --help 描述得很清楚。
仅使用一个外部可执行文件:
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 .)
【讨论】: