2014-11-24 6 views
0

나는 내 목표는 목표를 보관하기 위해BASH 및 AWK의 문장에서 특정 단어를 분리 하시겠습니까?

/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 

아래에 다음과 같이 확인하는 것입니다

/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 

아래이 같은 문장을 얻었다.

  1. 나는 인터넷에서 stackoverflow를 포함한 많은 기사를 읽었지 만 얻지 못했습니다.

    배쉬

    에서

  2. 는 나는이 결과 AWK에서

    /home/kernel/sdk/ 
    
  3. 나는 100 % 확실하지 않은 것을 가지고 bash는 내장 표현

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

    을 사용하려 이 코드는 내 의도에 잘 맞습니다.

    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 .... 
    
+0

전 미안하지만 그것을 명확하게 understaning 미안하지만 그냥 디렉토리 이름을 참조하십시오 – heaven4us

+0

@ heaven4us 패턴이 뭔지 설명, 당신은 전에 sdk 및 모든 것을 찾고 있습니까? –

+0

@ heaven4us 하나의 예제만으로는 충분하지 않습니다. 예상 출력과 함께 더 많은 줄을 제공하십시오. –

답변

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