让文本飞----空格与空行

前言:

如果一个运维工程师做不到随心所欲的按照自己的意愿玩弄文本的话,那他就不是一个合格的运维工程师,我们在文本处理方面追求的就是一种掌控感。在写shell的时候经常会遇到与空格、空行相关的内容,这样的操作本不是重要内容,但是如果写的不熟练的话,会就影响自己写shell的情绪,不管做啥事,是怕的就是心态炸了!

前一段时间看到一本书叫《扫除道》,就是讲如何打扫卫生的一本书,里面一个核心观念就是将周围打扫的非常干净,形成一种正气,这样是非常有利于自己要做的大事的,正所谓“一屋不扫何以扫天下”,这几天是体会到了。所以特意写一篇博客,总结一下LINUX下与空格、空行相关的操作,尽量做不到不让这样的小事耽误自己要做的大事。

1、删除一行当中的所有空格,只留下字符

[[email protected] ~]# ifconfig ens33 | sed -n 2p
        inet 192.168.80.200  netmask 255.255.255.0  broadcast 192.168.80.255
[[email protected] ~]# ifconfig ens33 | sed -n 2p | tr -d ‘  ‘
inet192.168.80.200netmask255.255.255.0broadcast192.168.80.255

解释:

题目是删除一行当中的所有空格,我们如果仅删除一行当中的某些东西,最好是使用tr了,tr有一个-d的选项,后面跟上空格,可以直接把一行当中所有空格给干掉!

2、替换一行当中开头空格为空,后面文本当中的字符和空格不变。

 ifconfig ens33 | sed -n 2p
         inet 192.168.80.200  netmask 255.255.255.0  broadcast 192.168.80.255
ifconfig ens33 | sed -n 2p | sed ‘s/^[ \t]*//‘
inet 192.168.80.200  netmask 255.255.255.0  broadcast 192.168.80.255

解释:

s///这种格式没没啥好说的,sed替换的标准语法格式

^[ \t]是什么意思呢?^表示开头,中括号里面的空格是一个空格和一个TAB,表示开头是开发或者TAB,最后个*表示一次或者多次。

注意:最后一个sed默认仅是操作第一行,也就是说,如果操作的内容有多行的话,请加上全局替换符g,也就变成了这样:

 ifconfig ens33 | sed -n 2p | sed ‘s/^[ \t]*//g‘

其实从一个人写命令的方式当中也可以看出一个人的性格,我们以取出网卡的IP地址为例:

第一种风格:强劲霸道,遇神杀神。

ifconfig ens33 | sed -n 2p | sed ‘[email protected]^[ \t]*@@‘ | cut -d‘ ‘ -f2192.168.80.200

解释:第三个命令就是把一行当中的开头空格或者TAB给替换掉,替换掉直接直接使用cut切。其实用这样写命令的人一开始就打算了以cut用空格为分隔符切,但是开头的空格阻碍了这样的操作,于是强行干掉开头的空格,以完成用cut切的意愿。

第二种风格:灵活变通,绕路而行。

ifconfig ens33 | sed -n 2p | awk -F‘ ‘ ‘{print $2}‘

解释:题目是一样的,但是这里我最后一个命令用的是awk,我个人不太喜欢这样的方式,不够直接霸道,痛快,尽管这么做代码会简洁很多。

3、将完全空白行(直接回车形成的行)压缩成一行。

我们以取出系统当中所有网卡的名字为例。

解释一下:cut -c -6意思是取出输出的前6个字符,后面连续两个sed都是替换掉没用的显示,但最后的结果当中里面有很多的空行,而且这些空行有一个部分是真的空行,还有一部分空行是有空格的,我们如果将所有的连续空行压缩成一个空行的话暂时是不行的,就因为有部分空格并不是真空行。所以,我们需要将不是真空行的空行变成真空行,怎么做呢?先把里面所有的空格给删除了,然后再进行压缩空行,如下所示:

ifconfig | cut -c -6 | sed ‘[email protected]@@g‘ | sed ‘[email protected]:@@g‘ | tr -d ‘ ‘ | tr -s ‘\n‘ ens33 lo virbr0

解释:tr -d ‘‘是删除文本当中所有的空格,tr -s ‘\n‘是压缩连接的空行成一个空行。

ifconfig | cut -c -6 | sed ‘[email protected]@@g‘ | sed ‘[email protected]:@@g‘ | sed ‘[email protected][[:space:]]@@g‘| tr -s ‘\n‘ens33lovirbr0

解释:tr -d ‘ ‘是删除文本当中所有空格,而sed ‘[email protected][[:space:]]@@g‘起到的作用与tr -d ‘ ‘是一样的。

4、替换行尾的空格为空

sed ‘s/[ \t]*$//g‘

解释:与第二个例子类似,只不过将行首的锚定,替换成了行尾的锚定。

5、总结

空白行类:

  1. 删除真空行用sed的全局删除选项:sed ‘/^$/d‘ <文件>
  2. 删除假空行:: sed ‘/^[ \t]*/d‘ <文件>
  3. 将所有的真空行行压缩成一行:tr -s ‘\n‘ <文件>

空格类:

  1. 删除所有空格:tr -d ‘‘和sed ‘[email protected][[:space:]]@@g‘的效果是一样的。
  2. 删除行首的空格:sed ‘[email protected]^[ \t]*@@‘ <文件>
  3. 删除行尾的空格:sed ‘[email protected][ \t]*[email protected]@‘ <文件>

原文地址:https://www.cnblogs.com/yizhangheka/p/11684678.html

时间: 2024-11-02 22:50:23

让文本飞----空格与空行的相关文章

HTML代码中的空格和空行

HTML 代码中的所有连续的空格或空行(换行)都会被显示为一个空格. 例子1:(文本内容中的连续空格) 代码 <p>这段文本中,输入连续的空格 大概输入了十个.</p> 显示效果:“格”和“大”之间的是个空格显示出来只是一个空格. 这段文本中,输入连续的空格 大概输入了十个. 例子2:(代码之间的连续空格) 代码 <span>span是一个行内标签</span> <span>和前面的span元素之间隔了很多个空格</span> 显示效

eclipse基本设置----中文乱码、行数显示、缩进方式、行末空格和空行自动删除、常用注解

一.中文乱码 window系统下,Eclipse中导入新的项目的时候,可能会遇到中文乱码的问题. 解决方案:将系统默认的格式为GBK改成UTF-8.以下是具体解决方法,可以根据需要选择不同的方法. 1.设置整个工作空间的编码,此操作会影响整个工作空间的项目. 设置步骤:菜单栏window --  Preferences -- General -- Workspace --Text file encoding--Other --UTF-8,保存配置(Apply and Close). 2.设置项目

dreamweaver批量去除空格,空行

制作网店的时候,发现有空行,或者空格.如果数量比较少,可以手动清除.如果多的话,可以使用dreamweaver批量去除.方法如下: 第一步,用正则表达式删除所有空白行(其实这一步不一定要做,我只是为了规范和节省代码) 要把 \n[\s| ]*\r 全部替换为 \n 第二步,用正则表达式删除首尾空白行(这一步必须做,就是删除产生错误的输出.) ^[\s| ]*\n|\n[\s| ]*$ 全部替换为 (此处为空,不用添加任何字符串)

Shell去除空格和空行的方法

一.去除空行的方法 有时我们在处理和查看文件时,经常会有很多空行,为了美观或是有需要时,就有必要把这些除行去掉了,方法如下: 1)用tr命令 复制代码 代码如下: cat 文件名 |tr -s '\n' 2)用sed命令 复制代码 代码如下: cat 文件名 |sed '/^$/d' 3)用awk命令 复制代码 代码如下: cat 文件名 |awk '{if($0!="")print}'cat 文件名 |awk '{if(length !=0) print $0}' 4)用grep命令

【freemaker】之文本,html文本,去除空格,字母大小写,循环数组,字符串截取,map取值,遍历map

测试代码 @Test public void test06(){ try { root.put("emp", "<span color='red'>你好张三</span>"); freemakerUtil.print(root, "06.ftl"); freemakerUtil.fprint(root, "06.ftl", fn+"06.html"); } catch (Except

空格和 空行

function_name() { commands #缩进   缩进是空出四个空格 } 赋值 = 左右不能加空格     value=4 if加空格与[ 隔开              if  []      while  [] 空行起着分隔代码的作用 函数开始和结束.判断或循环始末.函数调用始末以及前后联系不紧密的地方都要加空格 if expression1 then commands1 … else commands2 … fi if expression1 then commadns1

ueditor复制文本有多余的空行问题

今天从ueditor中复制文本,粘贴到记事本中发现每一行后面都多了一个空行. Ueditor中的文本如图: 本来只有三行,全选复制所有内容,再粘贴到记事本中发现有每一行文本后面都有多余的空行: 如果我想复制出来的文本与ueditor中显示一样,不要空行,该怎么做呢? Ueditor中的内容实际上仍然是html结构的代码: <p>元素表示一个段落,复制成纯文本后,每一个段落之间就有了一个空行.那么我们在复制事件中,手动修改复制的内容可以吗?经过一番试验发现是可以的,先监听copy事件,再从获取当

LinuxShell脚本攻略--第四章 让文本飞

grep $ grep pattern filename #搜索filename下的包含pattern的行$ grep "pattern" filename$ grep -E "[a-z]+" filename #正则匹配添加参数-E或者下面的egrep$ egrep "[a-z]+" filename$ echo this is a line. | egrep -o "[a-z]+\." #只输出匹配的文本部分 -oline

Shell-4-让文本飞

1.正则表达式 ^ 行起始标志 $ 行尾标记 . 匹配任意一个字符 [ ] 匹配包含在[字符]之中的任意一个字符,coo[kl]匹配cook或cool [^] 匹配除[^字符]的任意一个字符 [-] 匹配[]中范围内任意一个字符 ? 匹配之前的项一次或0次 + 匹配之前的项一次或多次 * 匹配之前的项0次或多次 () 创建一个用于匹配的子串 {n} 匹配之前的项n次 {n,m} 指定之前的项所必须匹配的最小次数和最大次数 | 交替-匹配|两边的任意一项 \ 转义符可以将上面的符号转义 2.gre