解决方法分为如下三步:

(1)        使用“tr”命令将制表符转换为空格;

(2)        使用“tr”命令将多个重复空格删除,保留一个空格;

(3)        使用“cut”命令进行域分割,输出正确结果。

1 检测分隔符

cat file | sed -n l  #或者cat -A file

上面显示内容中,对于空格仍然按照原样显示,出现多处空白的就表示多个空格字符。

制表符Tab则显示为“\t”,出现多个“\t”就表示多个制表符在一起。(cat -A命令中、\t变为^I)

可以看出该文件中既有多个空格连在一起,也有多个制表符连在一起。

2 去除重复的空格字符

去重是使用“tr”命令,使用-s选项,命令为“tr  -s  " "”。

使用该命令对转换制表符为空格后的输出结果进行去除重复空格字符(只保留一个空格字符),其完整命令和输出如下所示:

cat file | tr "\t" " " | tr -s " "

3 单词分割

使用命令cut的域分割进行单词的分割切分,例如需要提取分割每行的第一个单词,其命令为

cut  -d ' ' -f 1

总结: cat file | tr '\t' ' ' | tr -s ' ' | cut -d ' ' -f 1,3

12、多空格&多制表符文本之cut域分割终极方案的更多相关文章

  1. c程序设计语言_习题1-18_删除输入流中每一行末尾的空格和制表符,并删除完全是空格的行

    Write a program to remove all trailing blanks and tabs from each line of input, and to delete entire ...

  2. linux命令(44):sed,vim;去掉文件中的^M 符号,去掉行首空格和制表符

    注:下面的直接粘贴会出错,要重新输入^M 如何输入^M,先 ctrl+v,然后 ctrl+m 第一种方法: cat -A filename 就可以看到windows下的断元字符 ^M要去除他,最简单用 ...

  3. 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别

    isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...

  4. js全局替换空格,制表符,换行符

    this.value = this.value.replace(/\s+/g,'') "/ "这个是固定写法, "\s"匹配任何不可见字符,包括空格.制表符.换 ...

  5. EditPlus 2:用空格替换制表符

    打开软件点击菜单栏上的Tools(工具),在点击perferences(外观),再点击左边栏的File->Setting & Syntax(文件->设置与符号),再点击右栏的Tab ...

  6. 如何在 UltraEdit 删除空行(含空格,制表符)

    如何在 UltraEdit 删除空行(含空格,制表符) 打开UltraEdit,ctrl+r弹出替换对话框,点选启用正则表达式方法1:在查找框输入 ^p^p:在替换框输入 ^p执行全部替换:这种方法是 ...

  7. THINKPHP 清除HTML注释、换行符、空格、制表符等

    thinkphp3.2 3.2中取消了配置文件中的 'TMPL_STRIP_SPACE' 属性,所以我们先来修改:\ThinkPHP\Library\Think\Template.class.php ...

  8. 阅读《Android 从入门到精通》(12)——自己主动完毕文本框

    自己主动完毕文本框(AutoCompleteTextView) java.lang.Object; android.view.View; android.view.TextView; android. ...

  9. 如何在markdown中实现缩进,空格,制表符

    参考 https://stackoverflow.com/questions/6046263/how-to-indent-a-few-lines-in-markdown-markup Markdown ...

随机推荐

  1. Vim 的命令模式转插入模式

    一.在命令模式输入下面的快捷方式: i 在当前光标前插入字符: I 在当前行行首插入字符: a 在当前光标后插入字符: A 在当前行行尾插入字符: o 在当前行下面另起一新行: O 在当前行上面另起一 ...

  2. Android平台及其架构(部分转载)

    一.Android的系统架构 1.      应用程序 同Android系统一起发布的核心应用程序,如email 客户端,SMS 短消息程序,日历,地图,浏览器,联系人管理程序等. 这些应用程序都是用 ...

  3. 给手机发验证码 综合使用 (忘记密码处理 php发验证码 重置用户密码)

    前台页面 提取手机号调用 jQuery的ajax,到发送验证码 [php] view plain copy <title>找回密码 - 2015年xxx报名系统</title> ...

  4. hdu--2111--Saving HDU(贪心)

    #include<iostream> #include<vector> #include<algorithm> using namespace std; struc ...

  5. stl_vector.h

    stl_vector.h // Filename: stl_vector.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http ...

  6. ffmpeg编码h264只包含I帧P帧的方法

    ffmpeg使用avcodc_encode_video编码,默认产生的h264包含B帧,在安防行业很多地方是不需要用到B帧的. 1.基础知识充电 这就涉及到h264的各种profile格式了,参考 h ...

  7. bzoj2654tree

    给定一个n个点m条边的图,每条边有黑白两色,求出恰好含need条白边的最小生成树 最小生成树...仿佛并没有什么dp的做法 大概还是个kruskal的板子再加点什么东西 考虑到“恰好含need条白边” ...

  8. python密钥登录主机

    #!/usr/bin/python # -*- coding:utf-8 -*- ################################### # # 检查主机的损坏磁盘 # ####### ...

  9. Parallel Programming-Task Base

    Parallel.For/ForEach是数据层面的并行,本文所讲的Task是将不同的操作并行执行,本文主要内容: Task的工作模型 初始化Task 完成Task 取消Task 一.Task工作模型 ...

  10. UML Design Via Visual Studio-Sequence Diagram

    本文主要介绍在Visual Studio中设计时序图,内容如下: 何时使用时序图 时序图元素介绍 条件.循环在时序图中的使用 直接通过代码生成时序图 一.何时使用时序图 当要查看单个用例内若干对象的行 ...