[英]“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.