需求是检查指定应用的某些配置所以就写了个脚本,数据文件的内容是这样的:应用名称|IP|端口    多个IP用空格,这样可以生成数组。这个文件的数据是通过部署平台的API获取后自己组装的。

#!/bin/bash

CONFIG_PATH="temp.txt"

for line in $(cat $CONFIG_PATH); do
APPNAME=$(echo $line | awk -F "|" '{print $1}')
IPARRAY=($(echo $line | awk -F "|" '{print $2}'))
PORT=$(echo $line | awk -F "|" '{print $3}') echo $APPNAME
for IP in ${IPARRAY[@]}; do
echo $IP
done
done

脚本运行之后结果去不正确,因为在脚本中并没有输出端口

从要处理的文件上看本身没有问题,也没有特殊字符。上面的AWK语句在命令行中都可以正常执行结果也是正确的。改变一下脚本输出看看

#!/bin/bash

CONFIG_PATH="temp.txt"

for line in $(cat $CONFIG_PATH); do
APPNAME=$(echo $line | awk -F "|" '{print $1}')
IPARRAY=($(echo $line | awk -F "|" '{print $2}'))
PORT=$(echo $line | awk -F "|" '{print $3}') echo $APPNAME
echo $IPARRAY
echo $PORT
# for IP in ${IPARRAY[@]}; do
# echo $IP
# done
done

但看到这样的结果肯定不对,那么就很容易联想到分隔符问题。下面看这样一个简单的例子可能更加容易明白

这里明明是一行,我想输出的也是一行可是输出了三行,唯一的可能就是shell认为换行了。

bash shell默认将空格、制表符、换行符看做分隔符遇到这些字符shell会认为这个字符后面的是一个新的字符。所以上面就分成了3行输出。但有时候我们希望自定义这种分隔符来处理比如空格之类的东西,这就需要通过改变当前shell执行环境的分隔符定义。

再次执行

针对最初的例子我们也需要这样修改

#!/bin/bash

CONFIG_PATH="temp.txt"

IFS_OLD=$IFS  # 保存当前IFS
IFS=$'\n' # 定义新的分隔符
for line in $(cat $CONFIG_PATH); do
APPNAME=$(echo $line | awk -F "|" '{print $1}')
IPARRAY=($(echo $line | awk -F "|" '{print $2}'))
PORT=$(echo $line | awk -F "|" '{print $3}') echo $APPNAME
echo $IPARRAY
echo $PORT
# for IP in ${IPARRAY[@]}; do
# echo $IP
# done
done
IFS=$IFS_OLD # 恢复默认的IFS

Linux自定义分隔符IFS引发的文本处理问题的更多相关文章

  1. 【C/C++】Linux下system()函数引发的错误

    http://my.oschina.net/renhc/blog/54582 [C/C++]Linux下system()函数引发的错误 恋恋美食  恋恋美食 发布时间: 2012/04/21 11:3 ...

  2. 重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

  3. Linux自定义命令

    linux自定义命令,就是给当前命令取个别名.比如:ls 列出当前的文件,rm + 文件名 就能删除该文件,如何自定义命令,可以使用alias比如:alias gobin='cd /opt/tomca ...

  4. deepin linux 学习笔记(二)——文本编辑器

    目录 deepin linux 学习笔记(二)--文本编辑器 前言 nano 小巧的命令行编辑器 通用 编辑 定位 排版 配置 vim 思路独特的超级编辑器 命令模式 插入模式 底线模式(末行模式) ...

  5. palacehoder的自定义样式【输入框input /文本域textarea】

    7.palacehoder的自定义样式[输入框input /文本域textarea] 因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定(可以在冒号前面写input和texta ...

  6. Linux基础学习(5)--文本编辑器Vim

    第五章——文本编辑器Vim 一. Vim常用操作 1.Vim简介:              Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立.编辑. ...

  7. linux 自定义信号

    从来没试过linux自定义信号,查了下,说是系统只提供了SIGUSR1和SIGUSR2两个,就两个够吗?更要命的是如果要自定义信号如#define SIG_MYSIG   ....的话要改内核才行,哥 ...

  8. 润乾V4导出TXT时自定义分隔符

     ◆ 背景说明 报表中,导出text时,默认没有分隔符:应用中对导出Text,希望能自定义分隔符.在tag中定义了 textDataSeparator属性,让用户在导出Text时自定义分隔符,从而 ...

  9. Linux命令行下的vim文本编辑器

    Linux命令行下的vim文本编辑器 下面这个网站的地址讲解的非成分清楚!!!! http://blog.csdn.net/niushuai666/article/details/7275406 学习 ...

随机推荐

  1. bzoj3236 作业 莫队+树状数组

    莫队+树状数组 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...

  2. BZOJ_1070_[SCOI2007]修车_费用流

    BZOJ_1070_[SCOI2007]修车_费用流 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间 ...

  3. BZOJ_2152_聪聪可可_点分治

    BZOJ_2152_聪聪可可_点分治 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)…… ...

  4. Android代码混淆的问题解决(java.io.FileNotFoundException)

    Android Studio(2.3.3) 在给代码混淆时,提示: Warning:Exception while processing task java.io.FileNotFoundExcept ...

  5. Detours HOOK 库 过滤LoadLibraryExW

    Detours HOOK 库 Hook 过滤LoadLibraryExW 一丶简介 1.1 Detours库简介 Detours是微软提供的HOOK库.为我们Hook提供了方便.再也不用手撸 HOOK ...

  6. 《前端之路》之 JavaScript 进阶技巧之高阶函数(下)

    目录 第二章 - 03: 前端 进阶技巧之高阶函数 一.防篡改对象 1-1:Configurable 和 Writable 1-2:Enumerable 1-3:get .set 2-1:不可扩展对象 ...

  7. 快速入门:弄懂Kafka的消息流转过程

    大家都知道 Kafka 是一个非常牛逼的消息队列框架,阿里的 RocketMQ 也是在 Kafka 的基础上进行改进的.对于初学者来说,一开始面对这么一个庞然大物会不知道怎么入手.那么这篇文章就带你先 ...

  8. 使用JS+Three.js+Echart开发商场室内地图客流信息统计功能

    现在的商场管理者在管理商场的同时面临着一些无法避免的问题比如:人员监管不到位.效率低下.商场同质化严重,人流量少等.发现了这些问题作为开发人员的我们怎能视而不见,我们的责任就是发现问题解决问题,提供更 ...

  9. 设计模式 | 工厂方法模式(factory method)

    定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 结构:(书中图,侵删) 一个工厂的抽象接口 若干个具体的工厂类 一个需要创建对象的抽象接口 若干个 ...

  10. vue项目中vux的使用

    vux VUX 是基于 WeUI 和 Vue.js 的 移动端 UI 组件库,提供丰富的组件满足移动端(微信)页面常用业务需求. 在vue-cli中使用步骤如下: 1.安装: npm i vux -S ...