使用 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行的语句。

相关内容