作者 主題: Script 算每行開頭有幾個空白字元  (閱讀 7302 次)

0 會員 與 1 訪客 正在閱讀本文。

casa

  • 懷疑的國中生
  • **
  • 文章數: 41
    • 檢視個人資料
請問一個問題...
原始內容 (以下是 grep -n 出來的結果)

183:                pci, instance #0 (driver name: px_pci)
205:                    usb, instance #0 (driver name: ohci)
233:                    usb, instance #1 (driver name: ohci)
261:                        hub, instance #1 (driver name: hubd)
304:                            storage, instance #1 (driver name: scsa2usb)
380:                                disk, instance #3 (driver name: sd)
463:                    usb, instance #0 (driver name: ehci)
506:                        storage, instance #2 (driver name: scsa2usb)
582:                            disk, instance #4 (driver name: sd)
665:                    isa, instance #0 (driver name: ebus)
674:                    ide, instance #0 (driver name: uata)
711:                        sd, instance #2 (driver name: sd)

有沒有辦法知道
205:                    usb, instance #0 (driver name: ohci)
233:                    usb, instance #1 (driver name: ohci)
463:                    usb, instance #0 (driver name: ehci)
665:                    isa, instance #0 (driver name: ebus)
674:                    ide, instance #0 (driver name: uata)

屬於同一階層的? 也就是 usb, isa & ide 前面的空白數目是一樣的?

謝謝!

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #1 於: 2008-02-13 01:44 »

不大清楚你的需求,不過 sort 後結果不是你要的呼?

代碼: [選擇]
                                disk, instance #3 (driver name: sd)
                            disk, instance #4 (driver name: sd)
                            storage, instance #1 (driver name: scsa2usb)
                        hub, instance #1 (driver name: hubd)
                        sd, instance #2 (driver name: sd)
                        storage, instance #2 (driver name: scsa2usb)
                    ide, instance #0 (driver name: uata)
                    isa, instance #0 (driver name: ebus)
                    usb, instance #0 (driver name: ehci)
                    usb, instance #0 (driver name: ohci)
                    usb, instance #1 (driver name: ohci)
                pci, instance #0 (driver name: px_pci)

--
I am kenduest - 小州

my website: http://kenduest.sayya.org/

casa

  • 懷疑的國中生
  • **
  • 文章數: 41
    • 檢視個人資料
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #2 於: 2008-02-13 23:58 »
不好意思,排序似乎已經打掉原先階層的關係了...
那... 我這樣說好了,有一串字串,前面有好幾個空白字元
如果單純用 shell script (sh) 的寫法話,有可能知道這個字串前面有幾個空白字元嗎?

謝謝!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17465
    • 檢視個人資料
    • http://www.study-area.org
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #3 於: 2008-02-14 02:43 »
代碼: [選擇]
#!/bin/bash

in_file=your.file

while read line
do
        ws=`echo "${line%%[a-z]*}" | expand | sed 's/[^ ]//g' | wc -c`
        echo $ws: "$line"
done < $in_file

輸出結果的第一個 : 左邊,就是空白數。
« 上次編輯: 2008-02-14 04:19 由 netman »

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #4 於: 2008-02-14 09:53 »
代碼: [選擇]
#!/bin/bash

in_file=your.file

while read line
do
        ws=`echo "${line%%[a-z]*}" | expand | sed 's/[^ ]//g' | wc -c`
        echo $ws: "$line"
done < $in_file

輸出結果的第一個 : 左邊,就是空白數。

我修改一下:
#!/bin/bash

in_file=$1

IFS="\n"
while read line
do
        ws=`echo $line| sed 's/[^ ].*//g' | wc -c`
        echo $ws: "$line"
done < $in_file

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #5 於: 2008-02-14 15:30 »
代碼: [選擇]
#!/bin/bash

in_file=your.file

while read line
do
        ws=`echo "${line%%[a-z]*}" | expand | sed 's/[^ ]//g' | wc -c`
        echo $ws: "$line"
done < $in_file

輸出結果的第一個 : 左邊,就是空白數。

我修改一下:
#!/bin/bash

in_file=$1

IFS="\n"
while read line
do
        ws=`echo $line| sed 's/[^ ].*//g' | wc -c`
        echo $ws: "$line"
done < $in_file


再改一下,上面寫法會把後面的空白也算進去
ws=`echo -n $line| sed 's/\(^[^ ]*\).*$/\1/' | wc -c`

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17465
    • 檢視個人資料
    • http://www.study-area.org
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #6 於: 2008-02-14 15:51 »
恩,也不要忘了,原句子是數字開頭的哦...

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #7 於: 2008-02-14 17:44 »

我修改一下:
#!/bin/bash

in_file=$1

IFS="\n"
while read line
do
        ws=`echo $line| sed 's/[^ ].*//g' | wc -c`
        echo $ws: "$line"
done < $in_file


再改一下,上面寫法會把後面的空白也算進去
ws=`echo -n $line| sed 's/\(^[^ ]*\).*$/\1/' | wc -c`

那麼 echo 加 -n 參數就好了,其他不用改

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #8 於: 2008-02-14 17:46 »
恩,也不要忘了,原句子是數字開頭的哦...
呵,這是小 case, 原 po 一定知道怎麼做。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17465
    • 檢視個人資料
    • http://www.study-area.org
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #9 於: 2008-02-14 20:34 »
那如果,裡面的 space 有的是 tab 鍵呢?

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: Script 算每行開頭有幾個空白字元
« 回覆 #10 於: 2008-02-15 02:03 »
那如果,裡面的 space 有的是 tab 鍵呢?
netman 兄的 script 就有答案了。