【问题标题】:for loop before grep getting its output from sedgrep 从 sed 获取输出之前的 for 循环
【发布时间】: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.txtarray 的内容)。
  • 任何时候你在 shell 中编写一个循环只是为了操作文本你有错误的方法。发布示例输入和预期输出,以便我们可以帮助您以正确的方式做任何事情。

标签: bash for-loop sed grep pipe


【解决方案1】:

循环的第一次运行是吃掉所有的 sed 输出

解决将输出保存在变量中并为每个循环重播的问题:

words=`sed 's/["."",""("")"]//g' file.txt`
for i in ${array[@]}
do 
  if echo "$words" | grep -q -i "${array[$i]}"
  then
     echo "${array[$i]}"
  fi
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多