使用 awk

使用 awk

我想知道如何在 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更寬容一些)。windowasedsed\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行的語句。

相關內容