[个人原创]Linux下vi编辑过的文件末尾都有换行符:换行符() 相当于ASCII 换行字符(十六进制0A)

jackxiang 2010-9-22 14:25 | |
今天,在写shell的时候,需要读取一个sh文件的内容,然后给予拼接字符串后执行这个字符串,出现换行的情况,于是,经过苦心查找,原来是读取vi编辑文件的后面有换行符,通过php的trim对其做了处理,OK,以前一直没有注意,原来Linux的vi一直都在干这个事情,哈哈哈,特别写下这个记录!
----------------------------------------------------------------------------------------------------------------------------------------------------
Linux下vi一个jackxiang.txt,然后,sz下来,用编辑器:FlexHEX.ext打开Jackxiang.txt,换行符的查看:
16进制:6A 61 63 6B 78 69 61 6E 67 0A
原文:jackxiang

换行符(\n) 相当于ASCII 换行字符(十六进制0A),
因此,在文本模式下打开的文件作为新行字符读入CR/LF 对,并且作为CR/LF 写入新行字符。
原来是vi编辑器自己在行尾加了个\n换行符。用od命令可看的很清楚:od -A  d -t c jackxiang.txt

Onecent:/usr/local/tads/htdocs/*****_2010/bin # od -A  d -t c jackxiang.txt
0000000   j   a   c   k   x   i   a   n   g  \n
0000010

PHP用trim去掉换行符,即可!  "\n" (ASCII 10 (0x0A)), a new line (line feed).


补充学问:
vi test.txt
输入abc三个字符
但,ls -l可看到test.txt占了3个字节
为什么会这样呢?
原来是vi编辑器自己在行尾加了个"\n"换行符。
用od命令可看的很清楚:
od -A d -t c text.txt
得到输出如下(0000000/0000004是偏移量):
0000000   a   b   c  \n
0000004

其实并不是linux文件都会有\n换行符在末尾,比如echo -n "abc" > test1.txt
test1.txt的末尾就不会又换行符。

附:linux od(octal dump) 命令详解

Linux指令:od

示例用法:od -c hello

Linux指令:od

od命令
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。

语法:od [选项] 文件…
命令中各选项的含义:
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。

说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal
Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/3516/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2010-9-22 14:28
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]