Bashstring差异
我试图find一种方法来确定我的脚本中的两个string之间的差异。 我可以很容易地做到这一点与差异或通信,但我不处理文件,我宁愿不输出到文件,做比较,并阅读回来。
我看到comm,diff,cmp都允许传递两个文件或一个文件和标准input – 我想这很好,如果我不想输出两个文件…但它仍然有点烂。
一直在思考我可以使用grep或正则expression式 – 但我猜不是。
提前致谢,
使用diff
或com
或任何你想要的:
diff <(echo "$string1" ) <(echo "$string2")
格雷格的狂欢常见问题: stream程替代
或使用命名pipe道
mkfifo ./p diff - p <<< "$string1" & echo "$string2" > p
格雷格的狂欢常见问题: 使用命名pipe道
命名pipe道也被称为FIFO。
-
本身就是标准input。
<<<
是“这里的string”。
&
就像;
但把它放在后台
我更喜欢cmp
和Process Substitutionfunction:
$ cmp -bl <(echo -n abcda) <(echo -n aqcde) 2 142 b 161 q 5 141 a 145 e
在位置2上说,ab是第一个,而第二个是aq。 在位置5处,另一个区别正在发生。 只要用variablesreplace这些string,就完成了。
让我想起这个问题: 你如何区分Bash中的两条pipe道?
如果你正在打麻将,你可以做一个:
diff <cmd1 <cmd2 diff <(foo | bar) <(baz | quux)
与<
创build匿名命名pipe道 – 由bashpipe理 – 所以它们是自动创build和销毁,不像临时文件。
所以,如果你设法把你的两个不同的string作为一个命令的一部分(grep,awk,sed,…),你可以这样做,比如:
diff < grep string1 myFile < grep string2 myFile
(如果你假设你在你的文件行中有string1=very_complicated_value
和string2=another_long_and_complicated_value'
:不知道文件的内部格式,我不能推荐一个精确的命令)
假设你有三个string
a="this is a line" b="this is" c="a line"
从a中删除前缀b
echo ${a#"$b"}
从a删除后缀c
echo ${a%"$c"}