shell 获取Linux中两个字符串之间的差异[重复]

vq8itlhq  于 2023-04-07  发布在  Shell
关注(0)|答案(1)|浏览(227)

此问题已在此处有答案

Remove a fixed prefix/suffix from a string in Bash(9个回答)
Extract filename and extension in Bash(38个回答)
2天前关闭。
我在linux中设置了两个变量

export string1="/Users/test/Documents/projects/temp"
export string2="/Users/test/Documents/projects/temp/v1/airflow/1.86"

我需要得到它们之间的差异,就像上面的例子一样,它将是v1/airflow/1.86
在没有太多插件的情况下,获得所需结果的最佳方法是什么?
我试过下面的,但我猜它的工作时,你有个别的话

diff <( printf '%s\n' "$string1" ) <( printf '%s\n' "$string2" )
1c1
< /Users/test/Documents/projects/temp
---
> /Users/test/Documents/projects/temp/v1/airflow/1.86
iezvtpos

iezvtpos1#

如果一个字符串始终是另一个字符串的前缀,则可以通过参数扩展来移除最小的前缀模式。这并不是真正计算差异,而是将一个字符串从另一个字符串中移除,如果它是前缀:

$ string1="/Users/test/Documents/projects/temp"
$ string2="/Users/test/Documents/projects/temp/v1/airflow/1.86"
$ echo "${string2#"$string1"/}"
v1/airflow/1.86

当然,还有其他涉及sed或awk的选项:

$ awk -vstring1="$string1/" -vstring2="$string2" 'BEGIN{if(index(string2,string1)==1) print substr(string2, length(string1)+1)}'
v1/airflow/1.86

相关问题