我正在寻找git bash
(可能是......需要跨平台)命令,该命令需要两个文件路径并继续执行以下操作:
有可能吗?有人可以提供任何线索(等有用的代码)吗?
答案 0 :(得分:1)
您可以使用grep -v -f
(-F
来避免使用特殊字符)来查找文件之间的差异。这将返回文件B中的所有行但不返回文件A,然后将这些行附加到文件A的底部:
grep -vFf file_A file_B >> file_A
由于您也希望输出行,因此将它们存储在变量中是有意义的,因此您不必多次运行它(并且避免在附加到文件并获取后运行命令时出现任何问题不同的结果)。然后,您可以遍历该变量并使用数字打印出每一行:
#!/bin/bash
missing_from_A=$(grep -vFf "$1" "$2")
missing_from_B=$(grep -vFf "$2" "$1")
[[ -n "$missing_from_A" ]] && echo "$missing_from_A" >> "$1"
[[ -n "$missing_from_B" ]] && echo "$missing_from_B" >> "$2"
i=0
echo "First file: $1"
while read line; do
[[ -n "$line" ]] && printf "+%s:%s\n" $((i+=1)) "$line" || echo "No missing lines found"
done <<< "$missing_from_A"
i=0
echo "Second file: $2"
while read line; do
[[ -n "$line" ]] && printf "+%s:%s\n" $((i+=1)) "$line" || echo "No missing lines found"
done <<< "$missing_from_B"
然后使用要作为参数运行的文件调用脚本:
$ ./my_script.sh /home/user/file1.txt /home/user/file2.txt
示例输出(当然,文件也被修改):
First file: file1.txt
+1:second line in f2
+2:fourth line in f2
Second file: file2.txt
+1:second line in f1
+2:fourth line in f1
+3:fifth line in f1