簡體   English   中英

“閱讀”跳過每行的最后一個單詞

[英]“Read” skipping last word on each line

我從for循環中得到一些奇怪的行為,該循環讀取文件中的每一行,並在每一行之后讀取每個單詞。 讀取跳過每行的最后一個單詞。 我想我可能必須指定空白和換行符都是分隔符,但我還沒有找到如何做到這一點。 這是重要的腳本部分:

  cat $i | while read line    
    do
        echo $line
        sleep 1
        #Process each word
        echo $line | while read -d ' '  word
        do
            echo $word
            sleep 1
        done
    done

您是否看到過如何在bash shell中將一個字符串拆分成多個字符串,並用至少一個空格隔開? 也許您可以這樣做:

for word in $line
do
    echo $word
    sleep 1
done

for命令的語法為:

      for name [ [in [words ...] ] ; ] do commands; done

展開單詞,然后對結果列表中的每個成員執行一次命令,將名稱綁定到當前成員。

cat $i | while read line    
do
    echo $line
    sleep 1
    #Process each word
    for word in $line
    do
        echo $word
        sleep 1
    done
done

嘗試使用cut命令而不是read -d

如果您不需要記住行邊界,則fmt命令可能很有用。 fmt stdin上的純文本重排為給定的最大行長,因此,如果您給它的最大行長為1,它將最終將輸入的每個單詞拆分為自己的行。 對於你的問題,也許

cat $1 |
fmt -1 |
while read word
do
    # do something with $word
end

請注意,您已經失去了所有原始行邊界,並且依賴於fmt對單詞的定義。 如果由於某種原因確實需要線邊界,可以考慮

cat $1 |
while read line
do
    # do something with $line
    echo "$line" | 
    fmt -1 |
    while read word
    do
        # do something with $word
    done
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM