
我想知道如何在 while 循環中檢查文件的結尾。我在這裡所做的是,如果有一些單詞,例如“菠蘿”,“蘋果”,“洋蔥”,“橙色”等,我想使用 grep 命令查找包含特定單詞的行並做出一些評論“窗戶” 。例如,如果我使用grep 'a' 'file'
,那麼它將找到“菠蘿”、“蘋果”和“橙子”。然後,最後我想讓它打印成“菠蘿,窗口,蘋果,窗口,橙色,窗口”,類似這樣的東西。所以,我想在 while 或 for 迴圈中設定一些條件。任何幫助將非常感激。
編輯:範例輸入
apple
banana
pineapple
orange
mandu
ricecake
meat
juice
milk
onion
green onion
使用 grep 指令時的預期輸出 -->grep 'a' 'file name'
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
答案1
使用 awk
window
在匹配的每一行之後列印a
:
$ awk '/a/{print; print "window"}' filename
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
怎麼運作的
/a/{...}
選擇與正規表示式相符的行a
。對於每一行,都會執行花括號中的命令。
print
列印包含匹配的行
print "window"
印刷window
。
使用 sed
$ sed -n '/a/{s/$/\nwindow/; p}' filename
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
怎麼運作的
-n
告訴 sed 不要列印,除非我們明確要求。
/a/{...}
選擇與正規表示式相符的行a
。對於這些行,將執行花括號中的命令。
s/$/\nwindow/
window
在目前行末尾新增換行符。
p
印刷。
答案2
$ grep 'a' file | sed 'a\window'
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
這使用您的原始命令,然後使用GNU 中的(“append”)命令在每個結果行後面grep
附加單字(標準要求在插入文字的後面和末尾有一個換行符,但 GNU更寬容一些)。window
a
sed
sed
\
sed
或者,僅使用 GNU sed
:
$ sed -n -e '/a/{p;a\window' -e '}' file
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
該sed
表達式會列印包含該字母的每一行a
,然後附加字串window
。
答案3
shell方式可以這樣使用:
while IFS= read -r line || [ -n "$line" ]; do
case "$line" in
*a*) printf "%s\nwindow\n" "$line"
esac
done < input.txt
while IFS= read -r line; do...done < file.txt
這結合了讀取檔案的典型循環、case
匹配包含特定字元的行的語句以及printf
列印該額外window
行的語句。