Blog:博客园 个人

翻译自Looping Through a File that Contains Spaces – Bash for Loop

处理包含空格或特殊字符的文件是每个使用Linux的人都应必须掌握的。本文我们将讨论如何在带有空格的文件上使用for循环。

测试文本如下:

This line has spaces
these
do
not

现在,我们使用for循环来迭代这个文本。当我们执行for循环时,shell会看到第一行的空格,并假设每一行都是不同的迭代。

[root@test ~]# for i in $(cat test);do echo $i;done
This
line
has
spaces
these
do
not

IFS定义了在分隔单词时用作分隔的字符或字符集。

维基百科:对于Unix操作系统的许多命令行解释器(“shell”),内部字段分隔符(简称IFS)是指一个变量,该变量定义用于将模式拆分为某些操作的标记的字符。

默认情况下,IFS(字段分隔符)的值为<space><tab><newline>。因此,当shell看到第一行中的空格时,它将该行划分为四个标记(四个单词)。

修改IFS的值来满足我们的需求

IFS是一个环境变量。在更改环境变量之前,最好的做法是保存它们的内容。这样就可以轻松地将它们设置为默认值。

首先,我们先将IFS变量的值保存到OLDIFS中。

OLDIFS=$IFS

我们可以手动设置IFS成任何我们想要的值。在这种情况下,我们需要将字段分隔符作为换行符。我们可以像任何变量一样设置IFS。

IFS=<our value>

要将IFS设置为换行符,我们可以使用命令替换从echo命令获取换行符输出。

IFS=`echo -e "\n"`

echo -e "\n"的输出是一个换行符。用于反引号封装,将shell命令的输出作为变量IFS。

现在,当我们执行相同的for循环时,shell将通过换行符来分隔文本。

[root@test ~]# for i in $(cat test); do echo $i; done
This line has spaces
these
do
not

Shell:如何遍历包含空格的文本的更多相关文章

  1. Shell第二篇:正则表达式和文本处理工具

    一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则:     比如我们描述:4条腿   ...

  2. Linux 下如何处理包含空格和特殊字符的文件名

    Linux 下如何处理包含空格和特殊字符的文件名 作者: Avishek Kumar 译者: LCTT zpl1025 | 2015-07-08 07:47   评论: 12 收藏: 9 分享: 1 ...

  3. shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)

    文本处理三剑客:1.grep  2.sed  3.awk 一.grep:(过滤) grep的使用,主要的参数有: -n  :显示行号:-o  :只显示匹配的内容-q  :静默模式,没有任何输出,得用e ...

  4. Linux如何查找处理文件名后包含空格的文件

    Linux如何查找处理文件名后包含空格的文件   当Linux下文件名中出现空格这类特殊情况话,如何查找或确认那些文件名后有空格呢? 又怎么批量替换处理掉这些空格呢? 方法1: 输入文件名后使用Tab ...

  5. 使用innerHTML获取HTML代码时,HTML标记属性的双引号好多都消失不见了,原来是属性值中包含空格才会保留双引号

    最近搞的一个项目中所使用的方式比较奇怪,用Label显示HTML内容,然后不断地使用JS把Label的innerHTML复制到TextBox中. 但是,昨天发现了一个问题,获取元素值的时候,有时候正常 ...

  6. [转]Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

  7. 处理Properties文件中key包含空格的情况

    在这个互联网信息共享的时代,好处是一个问题的很多解决方案都可以从网络上得到,不好的一点就是很多人喜欢复制粘贴也不注明转载出处,不尊重别人的劳动成果,不假思索地把别人的原创复制到自己的博客然后发布,请大 ...

  8. IDEA 开发环境中设置Subversion,遇到svn安装路径包含空格无法使用版本控制的解决办法

    假如你的svn.exe的安装位置是:C:\Program Files\TortoiseSVN\bin\svn.exe,路径中包含空格. 1.File->Settings->Version ...

  9. SQL Server如何查找表名或列名中包含空格的表和列

    最近发现一个数据库中的某个表有个字段名后面包含了一个空格,这个空格引起了一些小问题,一般出现这种情况,是因为创建对象时,使用双引号或双括号的时候,由于粗心或手误多了一个空格,如下简单案例所示: USE ...

随机推荐

  1. 如何使用 js 实现一个 Promise.all 方法 PromiseAll

    如何使用 js 实现一个 Promise.all 方法 PromiseAll Promise.all PromiseAll https://developer.mozilla.org/en-US/do ...

  2. html template tag

    html template tag const tagName = `emoji-element`; const template = document.createElement('template ...

  3. ruby & rvm

    ruby & rvm https://rvm.io/ Ruby Version Manager (RVM) RVM is a command-line tool which allows yo ...

  4. how to copy to clipboard using windows cmd

    how to copy to clipboard using windows cmd Windows clipboard command line https://www.labnol.org/sof ...

  5. macOS 屏幕共享, 远程协助

    macOS 屏幕共享, 远程协助 Screen Sharing App 隐藏 app bug command + space 搜索 https://macflow.net/p/397.html Tea ...

  6. 小程序 in action

    小程序 in action https://github.com/xgqfrms/xcx-taro taro https://taro-docs.jd.com/taro/docs/README.htm ...

  7. Redis6.0.9主从搭建

    所谓主从,大家都知道主是写数据,而从是进行数据的拷贝. 1:配置 主节点 127.0.0.1 6379 从节点 127.0.0.1 6378 先将单机版的配置文件赋值两份出来,原先的配置中主要改动有: ...

  8. MySQL全面瓦解23:MySQL索引实现和使用

    MySQL索引实现 上一篇我们详细了解了B+树的实现原理(传送门).我们知道,MySQL内部索引是由不同的引擎实现的,主要包含InnoDB和MyISAM这两种,并且这两种引擎中的索引都是使用b+树的结 ...

  9. 微信小程序3D轮播图

    <!-- 轮播图 --> <swiper previous-margin='50px' next-margin='50px' bindchange="swiperChang ...

  10. LightOJ-1074(SPFA判负圈+Bellman-Ford算法)

    Extended Traffic LightOJ-1074 这题因为涉及到减法和三次方,所以可能会出现负圈. 这里使用的算法叫做SPFA算法,这个可以用来判负圈和求解最短路.Bellman-Ford算 ...