Разбить конкретное слово в предложении на BASH и AWK?
Я получил следующее предложение
/home/kernel/drivers/hal
/home/kernel/drivers/hal
/home/kernel/drivers/sdk
/home/kernel/drivers/sdk/systems/linux/kernel/common
/home/kernel/drivers/sdk/src
/home/kernel/drivers/sdk/build/linux/tar/soc/
src/soc/libsoc.c
/home/kernel/drivers/sdk/build/linux/src/soc/phy/
mt/soc/phy/x1.c
mt/soc/phy/x2.c
mt/soc/phy/x3.c
mt/soc/phy/x4.c
mt/soc/phy/x5.c
mt/soc/phy/x6.c
mt/soc/phy/x7.c
Моя цель - сделать так ниже
/home/kernel/drivers/sdk/build/src/soc/libsoc.c
/home/kernel/drivers/sdk/build/mt/soc/phy/x1.c
/home/kernel/drivers/sdk/build/mt/soc/phy/x2.c
/home/kernel/drivers/sdk/build/mt/soc/phy/x3.c
/home/kernel/drivers/sdk/build/mt/soc/phy/x4.c
/home/kernel/drivers/sdk/build/mt/soc/phy/x5.c
/home/kernel/drivers/sdk/build/mt/soc/phy/x6.c
/home/kernel/drivers/sdk/build/mt/soc/phy/x7.c
Для архивации цели.
Я читал статьи в интернете, в том числе stackru... но не смог его получить.
В баш
Я пытался использовать встроенное выражение Bash
${parameter%word} ${parameter%%word} Remove matching suffix pattern.
Я получил этот результат
/home/kernel/sdk/
В awk
Я не уверен на 100%, что этот код работает хорошо для моего намерения
awk -F/ '{ for(i=1;i<=NF;i++) { room[i]=$i }; i=1; while(i<=NF) { if(room[i] == "sdk") { j=i; i=1; while(i<=j) { print $i i++ } } else { j=i; i=1; while(i<=j) { print $i i++ } } } ;getline; }'
Результат
home kernel drivers ....
1 ответ
Простая замена строки сделает:
#!/bin/bash
path=/home/test/kernel/drivers/middle/sdk/build/linux/src/soc/phy/test.c
ffname="${path##*/}" # filename component
echo "newpath: ${path//\/build*/}/${ffname}"
выход:
newpath: /home/test/kernel/drivers/middle/sdk/test.c