SED在同一行中找到多个路径,并将其替换为多个不同的路径
我有一个文件,在同一行中有多个路径:SED在同一行中找到多个路径,并将其替换为多个不同的路径,sed,replace,path,hyphen,Sed,Replace,Path,Hyphen,我有一个文件,在同一行中有多个路径: cat modules.dep kernel/mm/zsmalloc.ko: kernel/crypto/lzo.ko: kernel/drivers/char/tpm/tpm_vtpm_proxy.ko: kernel/drivers/char/tpm/tpm.ko kernel/drivers/block/virtio_blk.ko: kernel/drivers/block/zram/zram.ko: kernel/mm/zsmalloc.ko ker
cat modules.dep
kernel/mm/zsmalloc.ko:
kernel/crypto/lzo.ko:
kernel/drivers/char/tpm/tpm_vtpm_proxy.ko: kernel/drivers/char/tpm/tpm.ko
kernel/drivers/block/virtio_blk.ko:
kernel/drivers/block/zram/zram.ko: kernel/mm/zsmalloc.ko
kernel/drivers/nvdimm/virtio_pmem.ko: kernel/drivers/nvdimm/nd_virtio.ko
kernel/drivers/nvdimm/nd_virtio.ko:
kernel/drivers/net/virtio_net.ko: kernel/drivers/net/net_failover.ko kernel/net/core/failover.ko
kernel/drivers/net/net_failover.ko: kernel/net/core/failover.ko
extra/virtio_gpu/virtio-gpu.ko: kernel/drivers/virtio/virtio_dma_buf.ko
extra/wlan_simulation/virt_wifi_sim.ko: kernel/drivers/net/wireless/virt_wifi.ko
我想把它改为:
/lib/modules/zsmalloc.ko:
/lib/modules/lzo.ko:
/lib/modules/tpm_vtpm_proxy.ko: /lib/modules/tpm.ko
/lib/modules/virtio_blk.ko:
/lib/modules/zram.ko: /lib/modules/zsmalloc.ko
/lib/modules/virtio_pmem.ko: /lib/modules/nd_virtio.ko
/lib/modules/nd_virtio.ko:
/lib/modules/virtio_net.ko: /lib/modules/net_failover.ko /lib/modules/failover.ko
/lib/modules/net_failover.ko: /lib/modules/failover.ko
/lib/modules/virtio-gpu.ko: /lib/modules/virtio_dma_buf.ko
/lib/modules/virt_wifi_sim.ko: /lib/modules/virt_wifi.ko
但我的尝试是:
sed -i 's/\(.*\)\//\/lib\/modules\//g' modules.load
仅当每行只有一条路径时有效
如何通过SED实现这一点,每条线路有多条路径
我在D(ASH)单机版中使用BusyBox中的SED
BusyBox v1.32.1-Magisk (2021-01-21 00:17:27 PST) multi-call binary.
Usage: sed [-i[SFX]] [-nrE] [-f FILE]... [-e CMD]... [FILE]...
or: sed [-i[SFX]] [-nrE] CMD [FILE]...
-e CMD Add CMD to sed commands to be executed
-f FILE Add FILE contents to sed commands to be executed
-i[SFX] Edit files in-place (otherwise sends to stdout)
Optionally back files up, appending SFX
-n Suppress automatic printing of pattern space
-r,-E Use extended regex syntax
If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).
提前感谢。此
sed
应该可以工作:
sed-E的~[^[:blank:]+/~/lib/modules/~g'modules.dep
/lib/modules/zsmalloc.ko:
/lib/modules/lzo.ko:
/lib/modules/tpm_vtpm_proxy.ko:/lib/modules/tpm.ko
/lib/modules/virtio_blk.ko:
/lib/modules/zram.ko:/lib/modules/zsmalloc.ko
/lib/modules/virtio_pmem.ko:/lib/modules/nd_virtio.ko
/lib/modules/nd_virtio.ko:
/lib/modules/virtio_net.ko:/lib/modules/net_failover.ko/lib/modules/failover.ko
/lib/modules/net_failover.ko:/lib/modules/failover.ko
/lib/modules/virtio-gpu.ko:/lib/modules/virtio\u dma\u buf.ko
/lib/modules/virt_wifi_sim.ko:/lib/modules/virt_wifi.ko
[^[:blank:][]+/
查找1+个非空白字符,后跟一个/
,从而匹配最长的字符串,直到它在每行多个字符串中的每个字符串中都得到一个/
。是的!它甚至可以与modules.load文件一起使用!谢谢