【问题标题】:bash: grep in loop does not grepbash:循环中的 grep 不 grep
【发布时间】:2016-01-20 10:08:11
【问题描述】:

我有(可能是一个明显/愚蠢的)问题: 我想遍历路径列表,剪切它们并使用字符串在日志文件中进行 grep。 虽然每个步骤都可以正常工作并且“手动处理”会导致命中 - grep 在循环中找不到任何东西?

for FILE in `awk -F "/" '{print $13}' /tmp/files_not_visible.uniq`; do
  echo -e "\n\n$FILE\n";
  grep "$FILE" /var/log/PATH/FILENAME-2015.12.*;
done

我也尝试做一个 while 循环作为反向练习,但失败并出现相同的非结果

while read FILE; do
  echo $FILE;
  echo $FILE | awk -F "/" '{print $13}' | grep -f - /var/log/PATH/FILENAME-2015.12.* ;
done < /tmp/files_not_visible.uniq/tmp/files_not_visible.uniq

所以,我猜有一些系统问题,我如何用 grep 处理搜索字符串?

【问题讨论】:

  • 在这里工作。当您将grep 替换为echo grep 时,您是否测试了您得到的命令?
  • 发现:文件列表行尾的不可见字符!教训:始终检查您从用户那里获得的数据!

标签: linux bash shell grep


【解决方案1】:

找到它:文件列表包含不可见字符作为该行的最后一个字符!可能是向我发送文件列表的用户在其他操作系统上创建了它!而且我只是在手工测试时复制了——当然——可见的字符!

通过剪切一行的最后一个字符来修复循环

> sed -e 's/.$//'

【讨论】:

  • 可能是回车。使用 dos2unix 可能比尝试手动删除它们更安全。
  • 是的,也是我的猜测 - 教训是给我的,在评估来自用户的数据时还要检查特殊字符:-/
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多