为Backup.txt
final
" main.txt"与" backup.txt"相同。如果我重命名" user1",请添加新用户,然后删除" user2"在" main.txt"。 " main.txt"好像是:
user1:password:17002:0:99:7:::
user2:password:17003:0:99:7:::
user3:password:17004:0:99:7:::
之后我使用以下命令比较两个文件:
username1:password:17002:0:99:7:::
user3:password:17004:0:99:7:::
newUser:password:17005:0:99:7:::
...实际输出:
diff --unchanged-line-format="" --old-line-format=":%dn: %L" --new-line-format=":%dn: %L" backup.txt main.txt
但是,我的预期输出是:
:1: user1:password:17002:0:99:7:::
:2: user2:password:17003:0:99:7:::
:1: username1:password:17002:0:99:7:::
:3: newUser:password:17005:0:99:7:::
像这样。默认情况下启用这些字符" diff"命令使用。如何为行格式启用这些字符。有可能吗?
答案 0 :(得分:1)
BSD和GNU差异提供的LTYPE
是" old"," new"和"未更改"。因此,您无法区分" new"并且"改变了#34;。
也就是说,要在格式字符串中获得某些区别,您需要正确填写它们。在%dn
中,d
和n
都被消耗(前者指定了十进制值,n
指定它引用行号或者数量修改的行,取决于上下文)。因此,如果您需要任何额外字符(例如c
,d
或a
),则需要在替换完成后添加这些字符。
# declaring functions to allow testing without creating files on-disk
backup () { printf '%s\n' user1:password:17002:0:99:7::: user2:password:17002:0:99:7::: user3:password:17002:0:99:7:::; }
main () { printf '%s\n' username1:password:17002:0:99:7::: user3:password:17004:0:99:7::: newUser:password:17005:0:99:7:::; }
diff \
--unchanged-line-format=":%dnu: %L" \
--old-line-format=":%dnd: %L" \
--new-line-format=":%dnn: %L" \
<(backup) <(main)