忽略shell脚本中回车的方法

2023-11-17

在实际应用过程中,经常遇到需要忽略shell脚本中回车的问题,本文做了一些总结,既有常规操作,也有令人拍案叫绝的方法,且让我慢慢说来。

一、使用Linux shell自身的字符串操作

Linux shell内置了一系列的字符串操作符号,可以实现字符串的长度、查找、替换等功能,具体的内容大家可以https://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html

这里主要使用对字符串的替换功能:

#替换一次
$ a="1\n2\n3"
$ echo $a
1\n2\n3
$ echo -e ${a/\\n/}
12
3

#全部替换
$ a="1\n2\n3"
$ echo $a
1\n2\n3
$ echo -e ${a//\\n/}
123

二、使用sed命令

假设1.sh中内容为:

1\n
2\n
3\n

目的是使用sed将”\n“替换为空字符。

按普通sed的用法,只要 :
 

sed "s/\n//g" 1.sh

但通过实操,没有起到作用。

通过查询相关资料,才知道sed是按行处理文本数据的,每次处理一行数据后,会在行尾自行添加一个换行符,这就产生了上述的问题。

如果非要使用sed命令,就要连续两行执行一次sed命令,感兴趣的同学可以看一下:

Sed and awk 笔记之 sed 篇:高级命令(一)
http://kodango.com/sed-and-awk-notes-part-4
Sed and awk 笔记之 sed 篇:高级命令(二)
http://kodango.com/sed-and-awk-notes-part-5

按它的说明,我们最终执行如下:

$ cat 1.sh
1
2
3
$ sed "s/\n//g" 1.sh
1
2
3
$ sed ":a;N;s/\n//g;ta" 1.sh
123

三、使用awk

这个就相当简单了,直接上过程:

$ cat 1.sh
1
2
3
$ awk '{printf $0}' 1.sh > 2.sh
$ cat 2.sh
123

四、使用tr

这个也相对简单,直接上过程:

$ cat 1.sh
1
2
3
#方法一,先用空格替换\n
$ cat 1.sh | tr '\n' ' '
1 2 3 
#方法二,直接将\n删除:
$ cat 1.sh | tr -d '\n'
123

五、使用续行符“\”

bash过长时,可以使用续行符“\”进行参数的换行。只要反斜杠“\”后面紧跟回车,就表示下一行是当前的续行。看代码:

$ cat 1.sh
echo 1\
2\
3
$ ./1.sh
123

这个技巧看起来非常简单,但是在实际应用尤其在CTF比赛中可以让你做骚到极致的事情。

试想一下这个场景,你每次只能够执行有限长度的指令,比如说7个字节长度的指令,你想执行下列指令:

nc 127.0.0.1 8080

长度肯定超过7个字节,那只能想办法用脚本实现,问题来了,如何写这个脚本?

如果用echo,那想一下,“echo * > 1.sh",这是比较少的长度了(当然,将echo软链接为一个长度为1的程序也能减少整条命令的长度)。但是依然没有办法满足每次只能输入7个字节长度的指令。

来了,一个骚操作来了,直接看操作:

#注意,$ >中间有空格,即 “$[空格]>”!!!
$ >" 8080"
$ >"0.1\\"
$ >0.\\
$ >7.\\
$ >"12\\"
$ >"nc \\"
$ls -t > a.sh
$cat a.sh
a.sh
nc \
12\
7.\
0.\
0.1\
 8080

测试一下,直接运行这个脚本,会发现确实运行了“nc 127.0.0.1 8080”这条命令。

在拼凑这样的指令时,需要注意的是'/'不能作为文件名;不能有同名的文件,否则覆盖;另外“.0.”也没法当作文件名。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

忽略shell脚本中回车的方法 的相关文章

随机推荐

  • 3D星球动画html,基于Three.js实现的3D土星(星球)动画

    JavaScript 语言 JaveScriptBabelCoffeeScript 确定 function getMat color our material is a phong material with no shininess hi
  • 【c++primer第五版】第六章函数-函数基础、参数传递、返回类型、函数重载、函数指针

    目录 函数基础 局部对象 函数声明 参数传递 main 处理命令行选项 特殊用途语言特性 调试帮助 函数匹配 函数指针 函数是一个命名了的代码块 通过调用相应的函数来执行相应的代码 函数可以有0或多个参数 通常会产生一个结果 也可以重载函数
  • QT——C++ 多线程05

    目录标题 一 创建多线程的方式 一 方式一 二 方式二 三 方式三 一 创建多线程的方式 QT创建 使用 多线程的方式有三种 直接创建QThread 对象 重写run方法 最后调用start方法启动线程 通过调用QObject类提供的mov
  • k8s基础概念、ETCD

    原理 和k8s结合点 etcd与k8s的交集 维护 基础概念 物理组件 逻辑组件 网络组件 工作负载 1 物理组件 Master Control plane kube apiserver 提供唯一api接口 提供集群管理接口 用户认证授权
  • 【Qt】使用 setWindowFlags 方法设置窗体的最小化、最大化、关闭按钮

    一 设置方法 void setWindowFlags Qt WindowFlags type Qt WindowFlags 有很多参数 其中 窗口最小化按钮 Qt WindowMinimizeButtonHint 窗口最大化按钮 Qt Wi
  • html 识别文本中的\n 进行换行

    文本内容有 n 怎么换行 1 v html渲染 使用正则将 n 替换成 br 标签 再用v html渲染 this content value replace n g br div div 2 使用css的white space div t
  • 学好少儿编程做人工智能开拓者

    乔布斯曾经说过 人人都应该学习编程 因为它教会你如何思考 格物斯坦小坦克认为少儿编程教育已经不再是一个遥远的话题 它逐渐成为一个趋势 成为一个现实 少儿教育编程行业领域的火爆 也反映出了国家对于少儿编程教育的重视 以及行业对编程人才的刚性需
  • 虚拟化技术7小问

    目录 kvm中的虚拟机cpu核心大于1 虚拟机就不能启动 只能设置为1的时候虚拟机才能启动 是什么原因 如何查看虚拟机宿主机的CPU是否支持硬件虚拟化 宿主机支持虚拟化 是不是还要开启相关的设置 虚拟机中再安装的虚拟机是不是只能是单核的虚拟
  • 存储器基础入门

    1 泰瑞达机台 Magnum VU本身作为一个灵活 集合式的测试平台 可以支持所有NAND以及MCP MCP Multiple Chip Package 存储器 MCP是在一个塑料封装外壳内 垂直堆叠大小不同的各类存储器或非存储器芯片 是一
  • Android TabLayout setupWithViewPager()方法绑定Viewpager不显示文字

    setupWithViewPager 做了什么事情 TabLayout tabLayout findViewById R id tabLayout ViewPager viewPager findViewById R id viewPage
  • spring框架---IOC

    spring框架的概述 spring是轻量级的开源的JavaEE框架 解决企业应用的开发复杂性 spring有两个核心 IOC AOP IOC 控制反转 把创建对象的过程交给Spring进行管理 AOP 面向切面 不修改源代码的进行功能增强
  • SpringBoot小知识点(可能有你不知道的)

    SpringBoot复习 基础部分 1 SpringBoot中配置文件使用 配置文件间的加载优先级 properties 最高 gt yml gt yaml 最低 2 yaml数据读取 对于yaml文件中的数据 其实你就可以想象成这就是一个
  • 【Salvation】——怪物角色动画&主角碰撞死亡动画

    Salvation 怪物角色动画 主角碰撞死亡动画 写在前面 这个动画功能同样也是使用JavaScript编写脚本 在Unity3D游戏引擎的环境中实现 在怪物的角色动画中 很多与人物相同 这里不再重复 一 设计敌人 拖一个精英sprite
  • Tcp通信步骤

    package cn dali4 code01 TCP通信步骤 服务器先启动 服务器端不会主动请求客户端 必须使用客户端请求服务器 客户端和服务器端建立一个逻辑连接 这个链接包含了一个IO对象 客户端和服务器端可以使用IO对象进行通信 IO
  • 树莓派软连接修改(python为例)

    树莓派软连接修改 进入linux的软连接存放位置 cd usr bin 删除原有软连接 以python为例 rm python 建立新软连接 以python连接python3为例 ln s usr python bin python3 us
  • 大数取模运算,快速幂取模运算

    1 快速幂取模 http www cnblogs com yinger archive 2011 06 08 2075043 html 快速幂取模就是在O logn 内求出a n mod b的值 算法的原理是ab mod c a mod c
  • 微服务系列:Spring Cloud Alibaba 之 Sentinel 高级流控规则

    微服务系列 Spring Cloud Alibaba 之 Sentinel 基本流控规则 在上一篇中 我们学习完了 Sentinel 的基本流控规则 这篇我们来研究一下 Sentinel 的高级流控规则 话不多说 开始今天的学习 一 概述
  • 【进阶项目】Lombok 使用详解

    前言 在 Java 应用程序中存在许多重复相似的 生成之后几乎不对其做更改的代码 但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求比如 在 Java 应用程序开发中 我们几乎要为所有 Bean 的成员变量添加 get set
  • 【java毕业设计】基于java+Lucene+Tomcat的搜索引擎设计与实现(毕业论文+程序源码)——搜索引擎

    基于java Lucene Tomcat的搜索引擎设计与实现 毕业论文 程序源码 大家好 今天给大家介绍基于java Lucene Tomcat的搜索引擎设计与实现 文章末尾附有本毕业设计的论文和源码下载地址哦 需要下载开题报告PPT模板及
  • 忽略shell脚本中回车的方法

    在实际应用过程中 经常遇到需要忽略shell脚本中回车的问题 本文做了一些总结 既有常规操作 也有令人拍案叫绝的方法 且让我慢慢说来 一 使用Linux shell自身的字符串操作 Linux shell内置了一系列的字符串操作符号 可以实