【发布时间】:2015-01-01 08:08:25
【问题描述】:
我正在尝试使用 sed 来操作文件中的文本,将结果通过管道传输到 grep 但我在 grep 之前有 for 循环,尝试使用此代码
sed 's/["."",""("")"]//g' file.txt | for i in ${array[@]}; do if grep -q -i "${array[$i]}"; then echo "${array[$i]}" fi
done
但问题是 sed 的输出没有通过管道传送到 sed(通过 for 循环)
只有这个效果好:
for i in ${array[@]}; do
sed 's/["."",""("")"]//g' file.txt | if grep -q -i "${array[$i]}"; then echo "${array[$i]}"
fi
完成
但是这里的 sed 命令在循环中是多余的。
我怎样才能让它工作?
【问题讨论】:
-
请发布输入数据(file.txt 数组)以及您希望从中得到什么以及遵循哪些规则。
-
这里很多东西看起来不对劲:
["."",""("")"]很奇怪;for i in ${array[@]}后跟${array[$i]}很奇怪;使用grep可以替换为 Bash 模式匹配;使用sed可以替换为 Bash 参数扩展。请遵循 Jotne 的建议并准确发布您想要实现的目标(包括file.txt和array的内容)。 -
任何时候你在 shell 中编写一个循环只是为了操作文本你有错误的方法。发布示例输入和预期输出,以便我们可以帮助您以正确的方式做任何事情。
标签: bash for-loop sed grep pipe