朋友碰到个难题,就是用sed命令往空文件末尾中写入数据,数据来自一个变量,怎么都添加不成功,然后问我要如何处理。仔细想了下,如果文件为非空的话,使用sed命令是可以搞定的,命令如下:

sed -i '$a\要插入的文字' file.txt

i    # 直接修改文件。

$    # 匹配文件的最后一行位置

a    # 命令在后面append

但如果是空的话,上面的命令就搞不定了!为什么呢? 因为sed是基于行来处理的文件流编辑器,如果文件为空的话,它是处理不了的!找了段英文的解释如下:

Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a

pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over

the input(s), and is consequently more efficient. But it is sed’s ability to filter text in a pipeline which particularly distin-

guishes it from other types of editors.

大致情形就是:

linux@host~# cat file.txt // 里面没有内容

linux@host~# touch file.txt // 新建一个空文件

linux@host~# cat file.txt // 里面没有内容

linux@host~# sed -i "\$a $var" file.txt // 往文件里面添加变量中的数据

linux@host~# cat file.txt // 但文件里面还是没有内容

linux@host~#

那么这种情形要如何处理呢?可以加个判断,如果文件存在但为空的话,使用echo命令来添加,如果非空的话,则使用sed命令,所以完整的测试应该这样:

【文件为空】

# var变量中的内容

$ var='append new context'

# 新建一个空文件

$ touch file.txt

# 文件内容为空

$ cat file.txt

$

# 判断文件是否为空,空则使用echo命令添加,非空则使用sed命令

$ test -s file.txt && sed -i "\$a $var" file.txt || echo "$var" >> file.txt

$ cat file.txt

append new context

文件非空

linux@host~# cat file.txt

This is line 1.

This is line 2.

linux@host~# test -s file.txt && sed -i "\$a $var" file.txt || echo "$var" >> file.txt

linux@host~# cat file.txt

This is line 1.

This is line 2.

append new context

从上面来看,问题得到完美的解决!

linux echo写入空文件夹,如何用sed命令往空文件中写入数据相关推荐

  1. linux复制目录命令夹,linux复制目录(文件夹)和打包命令

    linux复制目录(文件夹)和打包命令 复制目录命令: cp 需要复制的目录 -r 目的目录 (注意带参数-r) 压缩文件:zip -r 压缩后文件名 需要压缩的目录 喎?http://www.Bkj ...

  2. 递归遍历文件夹,并添加到TreeView控件中

    遍历文件夹,并把所有节点增加到TreeView控件中,这里单独写成了一个静态类,传入根目录节点和指定的目录这两个参数即可,可以稍作扩展用于其他方案 View Code 1 using System; ...

  3. mysql导出七张表成dtf文件_如何用Java实现把excel表中的数据导入到mysql数据库已有的表中?...

    展开全部 java 读excel 还是比较方便简单的,原理就是,先用java 读取excel,然后,一行行的写入数据库,字段的话32313133353236313431303231363533e4b8 ...

  4. 如何禁止某个linux用户访问某些文件夹及执行某些命令

    方案1: 给这个文件A增加个a的隐藏属性,只能增加数据不能删除修改数据,只有root能设置这个隐藏属性 chattr +a A lsattr A 可以查看隐藏属性 方案2: 修改文件所属用户和组,普通 ...

  5. linux:mkdir创建文件夹

    mkdir filename -p 创建多子文件价 mkdir -p dir1/dir1/dir1 dir1/dir1/dir2 dir1/dir2/dir1   //如,同时创建多个文件夹 rmdi ...

  6. linux下 java 压缩文件夹,java压缩文件夹linux下乱码问题

    前几天写了文章介绍java文件夹的压缩(见 http://zwllxs.iteye.com/blog/836483),但是发现一个问题,在linux下,如果文件夹内的文件是中文名,那么压缩后,这些文件 ...

  7. 转:飝兒物語的“Linux创建、删除文件夹”

    原创地址: http://www.cnblogs.com/zf2011/archive/2011/05/17/2049155.html 创建文件夹[mkdir] 一.mkdir命令使用权限 所有用户都 ...

  8. Linux(/)根目录下各个文件夹的含义及使用

    Linux根目录下的文件夹 1./- 根 每一个文件和目录都是从根目录开始. 只有root用户可在该目录下的进行写操作(拥有写权限).注意:/root是root用户的主目录,这与/.不一样 /root ...

  9. linux递归删除空文件夹,Shell脚本实现递归删除空文件夹

    有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的Shell脚本,于是自己动手写了一个 脚本 #!/bin/bash # author: 十年后的卢哥哥 # des: delete empt ...

最新文章

  1. Ubuntu 16.04~ORB SLAM2~Kinect v1
  2. php parsekit,php 5.5 parsekit 扩展问题
  3. python中easygui最新下载教程_python怎么下载easygui
  4. CentOS 6.3 升级软件 gcc等,并安装部署DNN环境 (未完成,不完整)
  5. Pipelines - .NET中的新IO API指引(二)
  6. 程序员的思维修炼》读书笔记
  7. 使用DB2遇到的一些错误SQLCODE=-551,SQLCODE: -204,SQLCODE:-433,SQLCODE: -104,rg.springframework.beans.factory.B
  8. EXCEL【数据处理之数据清洗——重复数据处理】
  9. pyqt+pyqtgraph+lka(界面制作)--优化版
  10. python游戏辅助lol_GitHub - skyedai910/lol-skin-spider: 30行Python代码爬取英雄联盟全英雄全皮肤...
  11. 【虚拟仿真】Unity3D中如何实现让3D模型显示在UI前面
  12. TortoiseSVN安装及导入已有SVN仓库
  13. 京东联手十大消费品牌 发布定制版叮咚音箱
  14. 用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件。但是有的同学是做实现层的开发,不直接做View层
  15. 手游人类一败涂地联机一直连接服务器,人类一败涂地手游怎么联机
  16. 国外著名大学网络课堂
  17. 小程序踩坑之地图定位不精准的问题
  18. LambdaMART原理浅析
  19. 数论-模运算与同余的性质
  20. Android微信抢红包插件原理和实现 适配微信6.6.1版本

热门文章

  1. Android9.0 源码下载和编译
  2. 面向对象 java初学
  3. EDIT Control控件,对应的变量为 int类型,输入为非法字符时怎么判断
  4. 文献阅读笔记:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer(T5)
  5. spring gateway 简约易懂版
  6. h5支付 jsapi支付 扫码支付(场景二)
  7. 游戏建模行业前景广阔?需要什么条件才能踏足在行业?
  8. 盾斧与片手剑:《怪物猎人》武器设计风格浅析(三)
  9. Iphone 手写Bug问题解决
  10. 【联想台式电脑 win11系统安装Ubuntu18.04】记录安装过程中网卡驱动、显卡驱动等问题