我想知道如何在 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
行的语句。