摘要:用过linux的都知道,echo和cat是我们常用的展示内容和写入内容的方式。

本文分享自华为云社区《echo和cat,重定向到文件时,解决特殊字符丢失问题》,作者: 大金(内蒙的)。

概述:

用过linux的都知道,echo和cat是我们常用的展示内容和写入内容的方式。

最近在使用这两个最简单的命令时,遇到了特殊字符写入失败问题。

这里重新学习一下echo和cat两个命令,记录一下。

三种失败场景

问题现象1:echo使用了-e但是特殊字符还是生效了

命令:

echo -e 'aa\taa' > a.txt cat a.txt

结果:

解释:

echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。

可用参数说明:

-n 不要在最后自动换行
-e 若字符串出现以下字符,仍以特殊字符处理。

特殊字符如下:

 \a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;

问题现象2:cat内容中带有$符号,字符丢失

命令:

cat << EOF > a.txt
eth=pwd
PATH=${eth}
EOF

结果:

cat a.txt

解释:

cat内容中带有$变量的时候会将 $和变量名 变成空格,可以添加转义字符\搞定。
也可以是将前面的EOF,增加‘’或者“”或者\,都可以解决,即是’EDF’,“EOF”,\EOF。

问题现象3:<<- 重定向时,制表符消失

命令:

注意这里是 <<- EOF

cat <<- EOF > a.txt
eth=pwd
PATH=/\${eth}
EOF

结果:

cat a.txt

解释:

Here Document 是在Linux Shell 中的一种特殊的重定向方式。

基本形式:

cmd << delimiter
Here Document Content
delimiter

作用:

将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数;

注意事项如下:

  • @1、EOF 只是一个标识而已,可以替换成任意的合法字符
  • @2、作为结尾的EOF前后不能有任何字符
  • @3、作为起始的EOF前后的空格会被省略掉
  • @4、重定向增加参数"-"的时候。会清除中间内容的制表符

总结

往文件里面写内容的最好方式是啥呢?

  • 使用Here Document写法
  • 转义EOF这个特殊字符

追加内容的场景:

cat << \EOF >> 文件名
文件内容
EOF

覆盖内容的场景:

cat << \EOF >文件名
文件内容
EOF

点击关注,第一时间了解华为云新鲜技术~

常用的echo和cat,这次让我折在了特殊字符丢失问题上的更多相关文章

  1. linux命令echo和cat比较

    当前主要比较echo 和 cat的重定向功能 1.echo 1 > /proc/xxx 解析: echo 进行重定向的时候,仅仅是将字符"1" 输出到 /proc/xxx文件 ...

  2. [Linux]常用命令之【cat/echo/iconv/vi/grep/find/head/tail】

    cat cat [选项] [文件].. # 一次显示整个文件或从键盘创建一个文件或将几个文件合并成一个文件 cat -n file1 # 编号文件内容再输出 echo -n 输出后不换行 -e 遇到转 ...

  3. 查看日志文件常用命令:tail,cat,tac,head,echo

    linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------- ...

  4. shell-输入与输出<echo, read, cat, tee >

    1. echo echo命令可以显示文本行或变量,或者吧字符串输入到文件. 用法:echo [option] string   #[option]可选:-e ==>解析转移字符,(常用的\n & ...

  5. echo 和 cat 的 区别

    tt="1 10 17 10-134-9-154.xml" echo $tt 只是单纯地打印出tt保存的这些变量 cat $tt 则会对tt 中保存的变量文件挨个打印出来

  6. Linux echo和cat和grep和tr的基础用法

    Linux vim   搜索 echo  :   显示输出功能 echo oldboy>1.txtx cat 1.txtx >  重定向   文件内容覆盖 >> 追加重定向   ...

  7. 【Shell案例】【tail/head/sed、echo $res ·· cat和管道】2、打印文件的最后5行

    描述经常查看日志的时候,会从文件的末尾往前查看,于是请你写一个 bash脚本以输出一个文本文件 nowcoder.txt中的最后5行示例:假设 nowcoder.txt 内容如下: #include& ...

  8. linux常用命令 echo输出命令

    echo输出命令 'echo [选项] [输出内容]' 选项 '-e' 支持反斜线控制的字符转换 控制字符​ \a 输出警告音 \b 退格键,也就是向左删除键 \n 换行符 \r 回车键 \t 制表符 ...

  9. 反弹Shell原理及检测技术研究

    1. 反弹Shell的概念本质 所谓的反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端. 本文会先分别讨论: ...

  10. 02 python 必知

    一.变量 1.变量的定义 将程序运算的中间结果临时存在内存里,以便后续代码调用. 2.变量的使用规范 1)变量必须要有数字,字母,下划线,任意组合. 2)变量不能数字开头. 3)不能是python中的 ...

随机推荐

  1. 拿到开发板需要做的事情 -- 配置Python环境

    1.查看系统时间 date -R 2.修改系统时间 windows上时间项目时间正常,Ubuntu16.04上时间错误 - 贾斯丁哔哔 - 博客园 (cnblogs.com) 3.安装pip3 sud ...

  2. 【scipy 基础】--傅里叶变换

    傅里叶变换是一种数学变换,它可以将一个函数或信号转换为另一个函数或信号,它可以将时域信号转换为频域信号,也可以将频域信号转换为时域信号.在很多的领域都有广泛的应用,例如信号处理.通信.图像处理.计算机 ...

  3. Boruvka 算法

    Boruvka算法解决某些问题超级好用. 这些问题形如,给你n个点,每个点有点权,任意两个点之间有边权,边权为两个点权用过某种计算方式得出. 求最小生成树. 通常用 \(O(log n)\) 的时间可 ...

  4. GPTs 初体验 - 1 分钟就能创建一个自己的 ChatGPT?

    就在 11.10 号早上,ChatGPT 已经偷摸的把GPTs功能,开放给所有尊贵的 Plus 用户了. 随着这波的功能开放,界面也是改了不少.点击左侧的 Explore 或者左下角的用户处,就可以直 ...

  5. JSON多层嵌套复杂结构数据扁平化处理转为行列数据

    背景 公司的中台产品,需要对外部API接口返回的JSON数据进行采集入湖,有时候外部API接口返回的JSON数据层级嵌套比较深,举个栗子: 上述的JSON数据中,最外层为请求返回对象,data里面包含 ...

  6. 本地数据备份与FTP远程数据迁移

    数据是电脑中最重要的东西.为了保证数据安全,我们经常会对数据进行备份.之前一直采用将重要数据拷贝至移动硬盘的方式实现备份,实现简单但每次都需要把所有文件拷贝一次,当文件很大时效率较低. 因此,考虑使用 ...

  7. springboot操作nosql的mongodb,或者是如何在mongodb官网创建服务器并进行操作

    第一步:在mongodb的官网里面创建云服务器 点进去 这是免费的,由于是一个项目只可以创建一个,这里我已经创建好了 用本地的mongodb服务也是可以的 第二步:点击connect,下载连接mong ...

  8. serdes集成流程前端

    serdes是 IP中间比较大的复杂的一个.集成前需要进行准备工作,千万不要一上来就写代码,这样非容易越写越差,先要做好规划,与合入计划. 1.收到IP材料后,第一时间检查内容都有哪些资料可以学习,使 ...

  9. [CF1364E] X-OR

    X-OR 题面翻译 题目描述 本题是交互题. 有一个固定的长度为 \(n\) 的排列 \(P\),其值域为 \([0,n-1]\),你可以进行不超过 \(4269\) 次询问,之后你需要输出这个排列 ...

  10. JVM整理笔记

    1.JVM位置 JVM是作用在操作系统之上的,它与硬件没有直接的交互 2.JVM体系结构 3.类装载器ClassLoader 类装载器:负责加载class文件,class文件在文件开头有特定的文件标示 ...