![对字符串的各个部分进行比较](https://linux22.com/image/213358/%E5%AF%B9%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%90%84%E4%B8%AA%E9%83%A8%E5%88%86%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83.png)
请帮助 Linux 新手!
我想比较 2 个不同图像的 lsinitrd 的输出。一些行例如
-rw-r--r-- 1 root root 2146 Aug 1 01:00 usr/lib/modules/5.18.12-1-default/kernel/lib/crypto/libchacha.ko.zst
-rw-r--r-- 1 root root 2165 Oct 14 16:58 usr/lib/modules/6.0.7-1-default/kernel/lib/crypto/libchacha.ko.zst
两者都引用同一文件的不同版本,因此我想忽略这些版本并仅考虑一个输出中存在而另一个输出中缺少的文件。
我怎样才能做到这一点?
答案1
可能是这样的:
v1="5.18.12-1-default"
v2="6.0.7-1-default"
diff \
<(lsinitrd -k "$v1" | grep ' usr/lib/modules/' | sed -e 's#usr/lib/modules/[^/]*#usr/lib/modules/version#' -e 's/^.* //') \
<(lsinitrd -k "$v2" | grep ' usr/lib/modules/' | sed -e 's#usr/lib/modules/[^/]*#usr/lib/modules/version#' -e 's/^.* //') \
| grep '^[<>]'
使用用户启动它root
或lsinitrd
在每个命令前面加上sudo
命令。
使用我的版本,我得到以下结果:
> usr/lib/modules/version/kernel/drivers/net/mii.ko.xz
> usr/lib/modules/version/kernel/drivers/net/usb
> usr/lib/modules/version/kernel/drivers/net/usb/r8152.ko.xz
> usr/lib/modules/version/kernel/drivers/net/usb/usbnet.ko.xz
> usr/lib/modules/version/kernel/drivers/net/veth.ko.xz
> usr/lib/modules/version/kernel/net/802
> usr/lib/modules/version/kernel/net/802/stp.ko.xz
> usr/lib/modules/version/kernel/net/bridge
> usr/lib/modules/version/kernel/net/bridge/bridge.ko.xz
> usr/lib/modules/version/kernel/net/llc
> usr/lib/modules/version/kernel/net/llc/llc.ko.xz
更新
如果您希望输出中包含版本 ID,请将grep
命令及其参数替换为以下awk
命令:
awk -v v1="$v1" -v v2="$v2" '$0 !~ /^[<>]/ {next} /^>/ {sub("/version/", "/" v1 "/"); print} /^</ {sub("/version/", "/" v2 "/"); print}'
我的结果:
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/mii.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/usb
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/usb/r8152.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/usb/usbnet.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/drivers/net/veth.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/802
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/802/stp.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/bridge
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/bridge/bridge.ko.xz
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/llc
> usr/lib/modules/6.0.5-200.fc36.x86_64/kernel/net/llc/llc.ko.xz