对字符串的各个部分进行比较

对字符串的各个部分进行比较

请帮助 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 '^[<>]'

使用用户启动它rootlsinitrd在每个命令前面加上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

相关内容