去掉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
 

 

相关文章
|
4月前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
409 0
Java字符串去掉空格的几种方法
Java字符串去掉空格的几种方法
|
Shell
SHELL下如何去掉字串里的空格(或指定字符)
SHELL下如何去掉字串里的空格(或指定字符)
947 0
Notepad++ 设置tab为N个空格
Notepad++ 设置tab为N个空格
139 1
|
存储 程序员 C#
C#的注释、快捷键、字符和运算
C#的注释、快捷键、字符和运算
332 0
去掉多余的空格---输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。输入格式
输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。 输入格式 共一行,包含一个字符串。 输出格式 输出去掉多余空格后的字符串,占一行。 数据范围 输入字符串的长度不超过 200200。 保证输入字符串的开头和结尾没有空格。
332 0
|
移动开发 Windows
ES6字符串模板多行清除行头空格制表符
最近在撸项目工程化的时侯,需要输出一些文案提示, 对于多行文本我肯定优先考虑用 ES6字符串模板来实现,直接使用的效果并不是很符合想要的。 因为字符串模板会默认保留你换行的格式,包括缩进这些。
371 0
VB编程:去除文本框首尾空行-51
VB编程:去除文本框首尾空行-51
196 0
intellij tab键改为4个空格
intellij tab键改为4个空格
256 0
intellij tab键改为4个空格
ES6—21:trim()方法去除字符串两侧空格
ES6—21:trim()方法去除字符串两侧空格
418 0
ES6—21:trim()方法去除字符串两侧空格

热门文章

最新文章