shell命令的话unix2dos
直接操汪衡作文件的话,记住,append是在最后加\r,就变成了\n\首晌r,而不是者陵锋\r\n
2. “LINUX删掉换行符”是什么
去掉文件中的换行符x0dx0a(1)tr命令的操作是针对文件的操作,它把整个文本当做操作的对象,所以可以直接去除文件中的换行符x0dx0atr '\n' ' ' < filex0dx0a(2)sed的操作对象是行.而作为行分割符号的回车符,本身是不属于行的枯肢.所以sed中必须加上N命令,把下一行的内容添加到当前的pattern space中,这样实际上是把相邻的2行合并了.下一次仍然是先n,再p,再N,开始新的轮回:x0dx0acat file | sed 'N;s/\n/ /'x0dx0a所以上面的语句是不能把没察世文件内容合并为一行的,到底该怎么写没困,我暂时没有想到,呵呵x0dx0a(3)直接用awkx0dx0aawk '{printf("%s ",$0)}' filex0dx0a(4)当然,用echo也是可以的:x0dx0awhile read line;do echo -n "$line"; done < awk_help.txt, 这样,可以把awk_help.txt的内容合并为一行x0dx0ased -e "s#\[/r][/r][/n]#\[/r][/n]#g" file
3. Windows和Linux换行符的区别
'\r'是回车,前者使光标到行首,(carriage return)
'\n'是换行,后者使光标下移一格,(line feed)
\r 是回车,return
\n 是换行,newline
对于换行这个动作,unix下一般只有一个0x0A表示换行("\n"),windows下一般都是0x0D和0x0A两个字符("\r\n"),苹果机(MAC OS系统)则采用回车符CR表示下一行(\r)
Unix系统里,每行结尾只有“<换行>”,即“\n”;
Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;
Mac系统里,每行结尾是“<回车>”,即“\r”。
一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾会多车一个^M字符。
Dos和windows采用回车+换行CR/LF表示下一行,即^M$($不是换行符的表示,换行符没有表示出来,$是文本结束EOF的表示)
而UNIX/Linux采用换行符LF表示下一行,即\n
苹果机(MAC OS系统)则采用回车符CR表示下一行,即\r
CR用符号'\r'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
LF使用'\n'符号表示, ASCII代码是10, 十六制为0x0A. 所弯扰以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字埋悄旦节表示.
由于dos风格的换行使用\r\n,把这样的文件上传到unix,有些版本的vi不能识别\r,所以vi显示时在行尾会出现^M出来,但是有些就能识别运猜\r\n,正常显示回车换行。
4. Linux /r /n
CR :Carriage Return,对应ASCII中转义字符\r ,0x0D(asc码是13) 指的是“回车” \r是把光标置于本行行首
LF :Linefeed,对应ASCII中转义字符\n ,0x0A(asc码是10) 指的是“换行” \n是把光标置于下一行的同一列
CRLF:Carriage Return & Linefeed,\r\n , 0x0D + 0x0A ,指的是回车换行 \r\n把光标置滑野于下一行行首
^M的原因 : ^M 注意要用 Ctrl + V Ctrl + M 来输入
Dos、Windows 格式的文件,用 0D 0A (CR+LF)作为换行符,而Unix 的则是以0A(LF) 作为换行符.所以dos 底下的文本文件到了unix的话,换行符就会多出来一个 0D(CR) 显示为 ^M,在linux中vim中无法显示\r
因为ascii中对应的不是linux中的标准acsii字符,其实困胡其对应的ASCII码十进制形式是: 13 (无显示形式);对应的八进制形式 15 (显示为^M)从二进制层面来理解,即可以删除换行符前面对应的字符字节(我瞎编的,应该对的),在字符层面直接删除^M这个字节即可
方法1:
在命令模式下:输入:%s/^M//g 然后,回车即可替换
注,其中”^M”的输入,分别是“Ctrl+v”、“Ctrl+M”键生成的
方法2:
使用vi打开文本文件
vi dos.txt
命令模式下输入
:set fileformat=unix
:w
方法3:
使用信尺喊sed 工具
sed ’s/^M//’ filename > tmp_filename
方法4:
既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现:
tr -d ‘\r’
或者:
sed -i 's/\r//' startup.sh
window下默认是 \r\n
linux下是\n
unix下是\r
现在, 我们看看本文开头部分的问题。 假设有一个linux下的unix.txt文件, 那么, 它在文件中的换行标志是:\n, 现在把unix.txt拷贝靠Windows上, 那好啊, Windows那双犀利的眼神仿佛是在对unix.txt文件说: 别跟我整什么\n, 我只认识文件中的\r\n, 如果你这个unix.txt文件里面有\r\n, 那我就认为是换行符, 否则, 我不认你。 如此一来, Windows压根就找不到unix.txt中的\r\n, 所以, 对于Windows而言, 压根就没有发现unix.txt有任何换行, 所以, 我们从Windows上看到的unix.txt文件显示在一行里面。
5. linux系统符号说明
01 系统特殊符号
02 系统通配符号
03 系统正则符号
说明: 查询信息的时候,会带来便利
1) 基础符号系列
$
a 调取变量信息
b 区分用户类型 $ 普通用户
c 结合awk对文件进行取列
xargs -n 2 <test01.txt|awk '{print $2}'
!
a 强制的作用 wq!
b 可以实现取反
awk '!/oldgirl/' test02.txt (排除oldgirl)
find /oldboy_dir/ ! -type f (排除文件)
c !信息 可以快速调取执行历史命令(慎用)
cat ~/.bash_history -- 记录历史命令信息, 但是不会实时记录
history -- 显示所有输入过的历史命令
|
a 实现管道功能
将前一个命令执行的结果交给管道后面的命令进行处理
一般管道符号 会经常和xargs命令配合使用
批量删除操作
find /oldboy -type f -name "oldboy*.txt"|xargs rm
find /oldboy_dir/ -type f -delete
find /oldboy_dir/ -type f -exec rm -f {} \;
查找指定数据信息进行复制
find /oldboy -type f -name "oldboy*.txt" |xargs -i cp {} /oldgirl/
find /oldboy -type f -name "oldboy*.txt" |xargs cp -t /oldgirl/
find /oldboy -type f -name "oldboy*.txt" -exec cp -a {} /oldgirl \;
查找指定数据信息进行移动
find /oldboy -type f -name "oldboy*.txt" |xargs -i mv {} /oldgirl/
find /oldboy -type f -name "oldboy*.txt" |xargs mv -t /oldgirl/
find /oldboy -type f -name "oldboy*.txt" -exec mv {} /oldgirl \;
xargs(火眼金睛)后面跟的命令,不识别别名信息
#
a 表示对配置文件信息进行注释
b 表示用户的身份信息 超级管理员用户
2) 引号符号系列
"" 基本上和单引号功能类似 但是可以对一些特殊符号做出解析 $ `命令`==$(命令)
'' 里面编写的什么内容就输出什么内容 所见即所得
作用:
01. 指定需要输出的信息
02. 利用引号将空格分隔的信息汇总为一个整体
``($()) 将引号里面命令执行结果,交给引号外面命令进行使用
3) 重定向符号
>/1> 标准输出重定向符号
>>/1>> 标准输出追加重定向符号
2> 错误输出重定向符号
2>> 错误输出追加重定向符号
< 标准输入重定向符号
tr xargs
<< 标准输入追加重定向符号
4) 逻辑符号系列
逻辑: 在完成一件事情的时候,有合理先后顺序
&& 前一个命令操作执行成功了,再操作执行后面的命令
|| 前一个命令操作执行失败了,再操作执行后面的命令
mkdir /old_dir && echo "create dir sucess" || echo "create dir failed"
create dir sucess
mkdi /old_dir && echo "create dir sucess" || echo "create dir failed"
-bash: mkdi: command not found
create dir failed
什么通配符号: 用于匹配文件名称信息, 便于快速查找文件信息 find
* 匹配所有信息
find /oldboy -type f -name "oldboy*" ---以oldboy开头的信息都查询出来
find /oldboy -type f -name "*oldboy" ---以oldboy开头的信息都查询出来
find /oldboy -type f -name "oldgirl*oldboy"
---以oldgirl 开头的信息
以oldboy 结尾的信息都查询出来
{} 产生序列信息
连续序列:
echo {01..05}
echo {a..z}
echo {A..Z}
生成不连续序列
a 有规律的不连续序列
echo {01..05..2}
01 03 05
echo {a..z..2}
b 没规律的不连续序列
echo {www,bbs,blog}
www bbs blog
生成组合序列
echo {1,2}{a,b}
1a 1b 2a 2b
echo {1,2}{a,b}{A,B}
1aA 1aB 1bA 1bB 2aA 2aB 2bA 2bB
echo A{a,b}
Aa Ab
A=oldboy.txt
echo oldboy.txt{a,b}
oldboy.txta oldboy.txtb
echo A{,b}
A Ab
A=oldboy.txt
b=.bak
cp oldboy.txt{,.bak} == cp oldboy.txt oldboy.txt.bak
快速备份文件命令
cp oldboy.txt{,.bak}
快速还原数据方法
cp oldboy.txt{.bak,}
echo A{B,}
AB A
oldboy.txt{.bak,} == cp oldboy.txt.bak oldboy.txt
基础正则符号:basic regular expression (BRE)
扩展正则符号:extended regular expression (ERE)
基础正则符号:
a 尖角符号:^
以什么开头的信息进行过滤出来
grep -v "^#" nginx.conf.default >nginx.conf(对不需要关注的信息取反)
常见错误
find / -type f -name "^oldboy" 错误
find / -type f -name "oldboy*" 正确
b 美元符号:$
以什么结尾的信息进行过滤出来
以m结尾信息, 并且显示上1行 和 下2行的信息
grep "m$" -A 2 -B 1 test.txt
常见错误:
如果过滤不出来,确认每行结尾是否有空格信息
方法一:
cat -A test.txt
方法二
vim 底行模式输入命令 --- :set list
c 尖角美元符号:^$
取出文件中空行信息
grep "^$" test.txt
grep -v "^$" test.txt
d 点符号: .
表示匹配任意一个且只有一个字符
grep "." test.txt -o(更直观的显示过程)
e 星号符号: *
匹配星号前面一个字符连续出现0次或多次
f 点和星号组合: .*
匹配所有信息
说明: 正则符号在匹配数据信息的时候具有贪婪特性
避免贪婪特性的方法,是在指定一行信息中唯一节点信息
g 转译符号: \
1) 将一些有意义的符号进行转译, 变为一个普通符号
grep "\.$" ~/oldboy_test.txt
2) 将一些没有意义的符号进行转译,变为有意义符号
\n 换行符号 linux
3) 可以将扩展正则符号转换成普通正则让grep sed命令可以直接识别'
grep "o\?" test.txt
h 括号符号:[]
匹配括号中每一个字符,并且匹配的关系是或者的关系
需求: 找出文件中oldboy 和 oldbey两个单词信息
grep "oldb[oe]y" test.txt
企业应用: 找寻文件中字母 数字信息
grep "[0-9a-zA-Z]" test.txt
i 尖号和中括号组合使用 : [^]
对中括号里面匹配的字符信息进行排除
grep "[^0-9a-zA-Z]" test.txt --- 将字母数字都排除,只留下符号信息
尖号和中括号组合使用 : ^[]
以中括号里面匹配的字符作为一行开头的字符
grep "^[zx]" test.txt
正则符号注意事项
按照每行信息进行过滤处理
注意正则表达符号禁止中文
附上颜色信息进行正则过滤 --color=auto/--color
基础正则符号可以被三剑客命令直接识别 grep sed awk
扩展正则符号不可以被三剑客命令中老二和老三直接识别
sed命令想识别正则符号: sed -r
grep命令想识别正则符号: egrep / grep -E
a 加号符号:+
匹配加号前面一个字符连续出现1次或者多次
b 竖线符号:|
或者关系符号
egrep "oldboy|oldbey" test.txt
c 括号符号:()
将多个字符信息进行汇总为一个整体
egrep "(oldboy)" test.txt
进行后向引用前向的一个操作(sed)
echo "123456"|sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"
修改配置文件内容
sed -rn "s#(^S.*UX=).*#\1enforcing#gp" /etc/selinux/config
SELINUX=enforcing
d 括号符号:{}
指定花扩号前一个字符连续匹配多少次
* 连续匹配 0 次 或 多次
+ 连续匹配 1 次 或 多次
1) {n,m} n表示最少连续匹配多少次 m表示最多连续匹配多少次
2) {n} n表示只连续匹配n次
3) {n,} n表示至少连续匹配n次,至多没有限制
4) {,m} m表示至多连续匹配n次,至少0次
e 问号符号:?
表示匹配问号前面一个字符出现0次或者1次
6. Linux 终端 如何换行 \n
echo -e 'zero\nzo\nzoo'
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般
文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
7. Linux下的vi换行符是什么,\n
可以用filetype设定,如dos(\r\n)、unix(\n)等
:set filetype默认是\n,但如果打开的文件全用\r\n,也能识别。
8. Linux系统文本文件的内容后面是不是都有一个换行符 \n
不一定,最后应该是EOF
9. linux下printf中\n的重要作用
linux的命令行默认采用行缓冲模式,换行符\n起到刷新输出缓冲区的作用。
10. linux特殊符号大全
tab:文本分隔符,相当于四个空格,在命令行界面可以用来自动补齐命令与目录。
ESC:esc+. ,上一条命令的选项参数,vim恢复到命令模式。
~:家目录
`:反引号,编程中调用shell命令
!:调用前面的命令,!!调用上一条,!23调用前面低23条。
@:at符,后面接IP地址。
#:Linux文件中注释行,表示不起作用。
$:文件行结尾标识符,变量标识符。
%:格式化文本。
^:文件行首标识符
&:任务放到后台
*:通配符,代表一个字符或者很多个字符。
\:用来转义,\t表示制表符,\n表示换行符。
<:数据流的流入方向,表示输入,将数据传入给左侧软件。
|:管道,改变数据流的方向,将数据传入给另外的软件。
>:数据流的流出方向,表示输出,将屏幕输出的内容写入一个文件。
2>:数据流的流出的第二个方向,表示错误输出,报错信息会写入到这个文件中。
>>:表示追加写入
/:根目录,目录分隔符
‘’:双引号,支持转义
‘:单引号,不支持转义
():shell编程中使用,命令行用的不多
[]:索引
{}:代码块
::vim或者less命令中,表示可以输入命令
;:分割不同命令
-:短选项标识符-h
--:长选项标识符--help