【问题标题】:Bash Script: For-Loop Over Newline... Syntax Explained?Bash 脚本:换行上的 For-Loop... 语法解释?
【发布时间】:2012-09-10 08:15:36
【问题描述】:

关于 SO 和其他地方的一个常见问题是如何使用 bash for 循环遍历每一行输出。我知道答案,并且多年来我一直很高兴地使用以下内容:

IFS=$'\n'

但是,我对所使用的语法有点困惑。我有一个很好的搜索/谷歌,但由于上述搜索引擎使用/忽略的符号数量众多 - 我没有找到解释。

我最近也在另一个脚本的一些输出中发现了这一点。我在回显 netcat 的结果时遇到问题。仔细检查后,发现 nc 的输出格式类似:

$'Some_Output_Here\r`

我最终需要切断\r,但不确定最好的方法,我最终使用了egrep -o ([0-9|a-Z]*)。有更好的想法吗?

【问题讨论】:

  • 仅供参考,循环文件内容的首选方法不是使用 for 循环,而是使用 while read 循环;见BashFAQ #1。

标签: linux bash shell scripting


【解决方案1】:

Bash 手册解释了这种引用方法,它称之为ANSI-C Quoting。

【讨论】:

  • 实际的 bash 手册页没有引用该名称的结构(很遗憾),但您可以通过搜索“ANSI C”找到相关部分。
  • info Bash 手册比手册页更完整、更易于理解。通过运行info bash 获取它,假设它已安装。
【解决方案2】:

在迈克尔编辑了原始帖子之后,我认为它更有意义。

我认为发帖的人需要查找回车的删除。

应该足够了
sed -e 's/^M//g'

还有很多其他方法可以删除控制不可打印的字符:

所有控制字符:

egrep -v "[[:cntrl:]]"
sed -r "s/[[:cntrl:]]//g"

不可打印的字符

tr -dc '[:print:]'

【讨论】:

  • 我所做的只是删除“任何帮助/指针将不胜感激。jwa”
猜你喜欢
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多