Разбить конкретное слово в предложении на 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

Для архивации цели.

  1. Я читал статьи в интернете, в том числе stackru... но не смог его получить.

  2. В баш

    Я пытался использовать встроенное выражение Bash

    ${parameter%word}
    ${parameter%%word}
    Remove matching suffix pattern. 
    

    Я получил этот результат

    /home/kernel/sdk/
    
  3. В 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
Другие вопросы по тегам