我从我的系统生成快照文件,其中包含目录的用户权限(简短示例如下):
first_snapshot
RO_sad;user_a
RW_sad;user_b
RO_5ka;user_c
RO_wts;user_c
片刻之后,我得到另一张快照,内容如下:
second_snapshot
RW_sad;user_a
RW_sad;user_b
RO_5ka;user_c
请注意,用户 a (从RO到RW)和用户 c (权限RO_wts已删除)的权限已更改。如何打印这两个文件之间的差异?使用时
diff first_snapshot second_snapshot
我得到这样的东西:
1,4c1,3
< RO_sad;user_a
< RW_sad;user_b
< RO_5ka;user_c
< RO_wts;user_c
\ No newline at end of file
---
> RW_sad;user_a
> RW_sad;user_b
> RO_5ka;user_c
\ No newline at end of file
可以帮助我的所需文件应该是:
remove RO_sad;user_a
add RW_sad;user_a
remove RO_wts;user_c
任何想法我怎么能实现这一目标?我更喜欢使用diff但是我需要删除对我来说无关紧要的条目,比如RW_sad; user_b(存在于两个快照中)或者来自diff的所有插件。
答案 0 :(得分:1)
你想要一个像这样的“统一差异”:
diff -U0 f1.txt f2.txt
它会给你这样的东西:
--- f1.txt 2014-10-09 19:47:33.000000000 +0800
+++ f2.txt 2014-10-09 19:47:44.000000000 +0800
@@ -1 +1 @@
-RO_sad;user_a
+RW_sad;user_a
@@ -4 +3,0 @@
-RO_wts;user_c
然后您可以用sed:
替换第一个字符diff -U0 f1.txt f2.txt | sed -n -e 's/^+R/add /p' -e 's/^-R/remove /p'
这会给你:
remove O_sad;user_a
add W_sad;user_a
remove O_wts;user_c
答案 1 :(得分:1)
尝试diff -u
- RO_sad;user_a
+ RW_sad;user_a
- RO_wts;user_c
答案 2 :(得分:0)
@约翰
不完全的。当使用diff -U0时,我得到:
--- first_snapshot 2014-10-09 14:02:27.000000000 +0200
+++ second_snapshot 2014-10-09 14:02:27.000000000 +0200
@@ -1,4 +1,3 @@
-RO_sad;user_a
-RW_sad;user_b
-RO_5ka;user_c
-RO_wts;user_c
\ No newline at end of file
+RW_sad;user_a
+RW_sad;user_b
+RO_5ka;user_c
\ No newline at end of file
所以我仍然得到这一行
+RW_sad;user_b
加上条目
\ No newline at end of file
我设法使用AWK
删除了两个文件中的重复值awk 'FNR==NR{a[$1];next};!($1 in a)' $first $second > $third
awk 'FNR==NR{a[$1];next};!($1 in a)' $second $first > $fourth
然后使用diff
diff -uU0 $fourth $third > diff.txt
我得到了一些我可以使用的东西:
--- fourth 2014-10-09 14:21:07.000000000 +0200
+++ third 2014-10-09 14:21:07.000000000 +0200
@@ -1,2 +1 @@
-RO_sad;user_a
-RO_wts;user_b
+RW_sad;user_a
在diff.txt上使用sed给了我所需要的一切:)