去掉Enter字符(\r)的几个方法

简介: 数据:test.txt: f1:f2:f3:0#1 Shell:   #!/bin/bash while read line do echo $line result1=$(echo $line|awk -F ':' '{print $4}' ) echo $re...

 

数据:
test.txt:

f1:f2:f3:0#1

Shell:

 

#!/bin/bash
while read line
do
echo $line
result1=$(echo $line|awk -F ':' '{print $4}' )
echo $result1
echo "1:"${result1}"test"

result=$(echo $line|awk -F ':' '{print $4}'|tr -d '\r' )
echo "2:"${result}"test"

result=$(echo $line|awk -F ':' '{print $4}'|sed 's/\r//g')
echo "3:"${result}"test"

#result=$(echo $line|awk -F ':' '{print $4}'|cut -d "\r" -f1)
#echo "4:"${result}"test"


done<test.txt

输出:

f1:f2:f3:0#1
0#1
test1//这个输出很奇怪,预期是1:0#1test
2:0#1test
3:0#1test

使用cut会报错:

cut: the delimiter must be a single character
Try `cut --help' for more information.

 

http://www.51testing.com/html/38/225738-219038.html

一些基本的概念:

I/O重定向所谓I/O重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件,命令,程序,或者脚本;
FD(File Descriptor文件标识符) 谈到I/0重定向就不得不谈到FD, Linux系统中,系统为每一个打开的文件指定一个文件标识符以便系统对文件进行跟踪,文件标识符是一个大于0的整数, 不同数字代表不同的含义, shell的FD通常为10个,即 0~9;通常系统默认占用了3个,也是我们常用的,
分别是:
0( stdin标准输入),
1( stdout标准输出),
2( stderr标准错误),
默认与keyboard、monitor、monitor有关;
其余3-9是保留的标识符,可以把这些标识符指定成标准输入,输出或者错误作为临时连接。
通常这样可以解决很多复杂的 重定向请求;
<用来改变读进的数据信道(stdin), 0 是 < 的默认值, 所以 < 与 0<是一样的;
>用来改变送出的数据信道(stdout, stderr), 1是 > 的默认值,故> 与 1> 也是一样的;
 
下面用一个例子来解释 2>&1
$ ./test.sh > test.log 2>&1
首先根据上面介绍的内容,我们知道上面的命令还可以写为:
$ ./test.sh 1> test.log 2>&1
”1> test.log“就很容易理解了,就是将标准输入定向到test.log
“2>&1”的意思是将错误输出定向到和1一样的输出设备,也是test.log
 
如果想让输出结果不仅在屏幕显示,也写入文件,则可以使用tee命令 
 
上面命令还可以写为:
$ ./test.sh > test.log 2>test.log
同样是将错误输出到和1一样的test.log
那为什么我们要用2>&1呢?这是应为如果用 command > file 2>file的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道,而 command >file 2>&1这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.
从IO效率上,前一条命令的效率要比后面一条的命令效率要低;所以我们要使用2>&1
 
http://www.51testing.com/html/53/84753-218993.html
 

 

相关文章
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
162859 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
数据可视化 PyTorch 算法框架/工具
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
使用PyTorch搭建VGG模型进行图像风格迁移实战(附源码和数据集)
1139 1
|
运维 SpringCloudAlibaba Kubernetes
云原生-我的学习路线总结
我的学习路线总结
2763 0
|
安全 Linux 网络安全
上手Linux:禁用 root 用户,修改22端口,使用 ssh 登录
本文介绍了在 linux 系统中,如何禁用 root 用户登录,修改默认的 22 端口号,以及设置只能使用 SSH 秘钥登录的方式,从而在一定程度上提高了系统的安全性。
1824 0
|
7月前
|
安全 Linux 虚拟化
VMware Tools 12.5.1 下载 - 虚拟机必备组件 (驱动和交互式服务)
虚拟机必备组件 (驱动和交互式服务)
4318 14
VMware Tools 12.5.1 下载 - 虚拟机必备组件 (驱动和交互式服务)
|
10月前
|
传感器 人工智能 自然语言处理
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
RDT(Robotics Diffusion Transformer)是由清华大学AI研究院TSAIL团队推出的全球最大的双臂机器人操作任务扩散基础模型。RDT具备十亿参数量,能够在无需人类操控的情况下自主完成复杂任务,如调酒和遛狗。
648 22
RDT:清华开源全球最大的双臂机器人操作任务扩散基础模型、代码与训练集,基于模仿能力机器人能够自主完成复杂任务
url参数+,&,=,/等转义编码
  url出现了有+,空格,/,?,%,#,&,= 等特殊符号的时候,可能在服务器端无法获得正确的参数值。 案例:   如果我们想让barcodevalue的参数是http://www.baidu.
7732 0
|
Java Shell 网络安全
java实现连接远程服务器,并可以执行shell命令
java实现连接远程服务器,并可以执行shell命令
440 2
|
机器学习/深度学习 XML 调度
|
SQL Web App开发 安全
Smanga未授权远程代码执行漏洞(CVE-2023-36076) 附加SQL注入+任意文件读取
Smanga存在未授权远程代码执行漏洞,攻击者可在目标主机执行任意命令,获取服务器权限。
523 0