Shell:如何遍历包含空格的文本
翻译自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:如何遍历包含空格的文本的更多相关文章
- Shell第二篇:正则表达式和文本处理工具
		
一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则: 比如我们描述:4条腿 ...
 - Linux 下如何处理包含空格和特殊字符的文件名
		
Linux 下如何处理包含空格和特殊字符的文件名 作者: Avishek Kumar 译者: LCTT zpl1025 | 2015-07-08 07:47 评论: 12 收藏: 9 分享: 1 ...
 - shell脚本之正则表达和文本处理(文本处理三剑客:1、grep  2、sed  3、awk)
		
文本处理三剑客:1.grep 2.sed 3.awk 一.grep:(过滤) grep的使用,主要的参数有: -n :显示行号:-o :只显示匹配的内容-q :静默模式,没有任何输出,得用e ...
 - Linux如何查找处理文件名后包含空格的文件
		
Linux如何查找处理文件名后包含空格的文件 当Linux下文件名中出现空格这类特殊情况话,如何查找或确认那些文件名后有空格呢? 又怎么批量替换处理掉这些空格呢? 方法1: 输入文件名后使用Tab ...
 - 使用innerHTML获取HTML代码时,HTML标记属性的双引号好多都消失不见了,原来是属性值中包含空格才会保留双引号
		
最近搞的一个项目中所使用的方式比较奇怪,用Label显示HTML内容,然后不断地使用JS把Label的innerHTML复制到TextBox中. 但是,昨天发现了一个问题,获取元素值的时候,有时候正常 ...
 - [转]Windows中的命令行提示符里的Start命令执行路径包含空格时的问题
		
转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...
 - 处理Properties文件中key包含空格的情况
		
在这个互联网信息共享的时代,好处是一个问题的很多解决方案都可以从网络上得到,不好的一点就是很多人喜欢复制粘贴也不注明转载出处,不尊重别人的劳动成果,不假思索地把别人的原创复制到自己的博客然后发布,请大 ...
 - IDEA 开发环境中设置Subversion,遇到svn安装路径包含空格无法使用版本控制的解决办法
		
假如你的svn.exe的安装位置是:C:\Program Files\TortoiseSVN\bin\svn.exe,路径中包含空格. 1.File->Settings->Version ...
 - SQL Server如何查找表名或列名中包含空格的表和列
		
最近发现一个数据库中的某个表有个字段名后面包含了一个空格,这个空格引起了一些小问题,一般出现这种情况,是因为创建对象时,使用双引号或双括号的时候,由于粗心或手误多了一个空格,如下简单案例所示: USE ...
 
随机推荐
- Dart & import show & import hide & import as & part & part of
			
Dart & import show & import hide & import as & part & part of // 部分导入,即仅仅导入 dart ...
 - css & circle & shapes
			
css & circle & shapes css-tricks circle https://css-tricks.com/the-shapes-of-css/ https://cs ...
 - nodejs stream 创建读写流
			
const fs = require("fs"); const { Writable, Readable, Duplex, Transform } = require(" ...
 - uniapp 扫二维码跳转
			
在h5和wxapp中 生成qrcode的组件 https://ext.dcloud.net.cn/plugin?id=39 wx小程序扫二位码文档 生成链接时 computed: { ...mapSt ...
 - [转]C++语言的历史和标准化
			
转:https://blog.csdn.net/lemonrabbit1987/article/details/48222339 1979年4月,贝尔实验室的Bjarne Stroustrup(本贾尼 ...
 - Prometheus时序数据库-内存中的存储结构
			
Prometheus时序数据库-内存中的存储结构 前言 笔者最近担起了公司监控的重任,而当前监控最流行的数据库即是Prometheus.按照笔者打破砂锅问到底的精神,自然要把这个开源组件源码搞明白才行 ...
 - 第39天学习打卡(多线程 Thread Runnable 初始并发问题 Callable )
			
多线程详解 01线程简介 Process与Thread 程序:是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念. 进程则是执行程序的一次执行过程,它是一个动态的概念.是系统资源分配的 ...
 - 使用Maven新建SpringBoot工程
			
最近用IDEA插件创建Springboot项目,总是403,估计被墙了! 那么这里在提供两种方法 1.从官网下载模板,导入IDEA内 2.使用Maven创建 方法一:打开 https://start. ...
 - zabbix 面板graph图上没有数据显示
			
1. 问题: zabbix_server日志出现大量如下错误: query failed: [1526] Table has no partition for value 1507509984 2. ...
 - 剑指 Offer 36. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树
			
剑指 Offer 36. 二叉搜索树与双向链表 Offer_36 题目描述 题解分析 本题考查的是二叉树的中序遍历以及二叉排序树的特征(二叉排序树的中序遍历序列是升序序列) 利用排序二叉树中序遍历的性 ...