Bootstrap

Linux进阶操作

1. split分割文件命令
语法:

split [OPTION] [INPUT [PREFIX]]

选项:
-a 指定后缀长度
-b 每个文件多少字节,可加单位,例如b,k,m等
-d 使用数字后缀而不是字母
-l 指定每个文件的行数。
PREFIX 前缀字符,可作为划分文件的前缀文字。
例子:split -l 200000 msisdn.unl -d -a 2 msisdn_
解析:按行数切割文件msisdn.unl,每20w行一个文件,切割后的文件名前缀为msisdn _,后缀为2个数字递增。

2. cat文件操作命令
语法:

cat [OPTION] file

选项:
-n 由1开始对所有输出的行数编号
-b 和-n相似,不过对于空白行不编号
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
例子:
(1) 合并文件,一个文件在上,一个文件在下:cat file1 file2 > file3(注:如果需要输出一个文件在左,一个文件在右,则使用paste file1 file2 > file3

(2) 一次显示整个文件:cat filename

(3) 创建新文件:cat > filename

(4) 清空文件:cat /dev/null > test .unl

3. scp远程文件拷贝命令
语法:

scp [OPTION] file @IP:/path

选项:
-p 保留源文件的修改时间,访问时间和访问权限
-q 不显示传输进度条
-r 递归复制整个目录
-v 详细方式显示输出
-P 端口号port,注意是大写的P。指定数据传输用到的端口号
例子:
(1) 拷贝本机文件到远程服务器,包括文件夹本身:scp -r /home/zymtest/ [email protected]:/home/

(2) 拷贝本机某个文件夹所有文件到远程服务器,不包括文件夹本身:scp /home/zymtest/ [email protected]:/home/zymtest

(3) 拷贝本机某个文件msisdn.unl到远程服务器,并重命名为test.unl:scp /home/zymtest/msisdn.unl [email protected]:/home/test.unl

(4) 使用特定端口拷贝本机某个文件夹所有文件到远程服务器:scp –P 22 /home/zymtest/ [email protected]:/home/zymtest

(5) 拷贝远程服务器某个文件夹所有文件到本机: scp [email protected]:/home/zymtest /home/zymtest/

4. sed在线编辑命令
语法:

sed [OPTION] [action]

选项:
-n 使用安静(silent)模式。在一般sed的用法中,所有来自STDIN 的数据一般都会被列出到终端上。但如果加上-n参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e直接在命令列模式上进行 sed 的动作编辑;
-f 直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r sed的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i 直接修改读取的文件内容,而不是输出到终端。
动作说明:[n1[,n2]]action
a 新增,a 的后面可以接字串,而这些字串会在新的一行出现(当前的下一行)
i 插入,i的后面可以接字串,而这些字串会在新的一行出现(当前的上一行)
c 取代,c的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d 删除,删除,后面一般不需要接字符串
p 列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s 替换,通过s可以搭配正规表示法!例如 1,20s/old/new/g
例子:

以行为单位的新增/删除
(1) 显示删除文件第三到最后一行后的数据:nl sedTest.csv | sed ‘3,$d’

(2) 显示在文件第二行后加入drink tea的数据:nl sedTest.csv | sed ‘2a drink tea’

(3) 显示在文件第二行前加入drink tea的数据:nl sedTest.csv | sed ‘2i drink tea’

(4) 增加两行以上,在第二行后面加入两行字,例如 Drink tea or … 与 drink beer?
nl sedTest.csv | sed ‘2a Drink tea or …\
#> drink beer ?’

注:每一行之间都必须要以反斜杠『 \ 』来进行新行的添加

以行为单位的替换与显示
(1) 将第2-5行的内容替换为『No 2-5 number』:nl sedTest.csv | sed ‘2,5c No 2-5 number’

(2) 仅列出文件内的第 4-5行:nl sedTest.csv | sed -n ‘4,5p’

数据的搜寻并显示
(1) 输出文件中含有Test4关键字的行:nl sedTest.csv | sed -n ‘/Test4/p’

数据的搜寻并删除
(1) 删除sedTest.csv中所有包含Test4的行,其他行输出:nl sedTest.csv | sed ‘/Test4/d’

数据的搜寻并执行命令
(1) 搜索sedTest.csv,找到Test4对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把Test替换为This is Test,再输出这行:
nl sedTest.csv | sed -n ‘/Test4/{s/Test/This is Test/;p;q}’

多点编辑
(1) 一条sed命令,删除sedTest.csv第三行到末尾的数据,并把Test替换为This is Test:
nl sedTest.csv | sed -e ‘3,$d’ -e ‘s/Test/This is Test/’

直接修改文件内容
(1) 利用sed将文件中的3替换成three:sed -i ‘s/3/three/g’ sedTest.csv

5. grep查找命令
语法:

grep [OPTION] text file

选项:
-a 或 --text : 不要忽略二进制的数据。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-G 或 --basic-regexp : 将样式视为普通的表示法来使用。
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 --ignore-case : 忽略字符大小写的差别。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-q 或 --quiet或–silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显示错误信息。
-v 或 --invert-match : 显示不包含匹配文本的所有行。
-V 或 --version : 显示版本信息。
-w 或 --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
例子:
(1) 输出查询结果到文件(查询01020020201229开头且后面为16位数字的字符串并输出):
cat access-external* | grep LOAN_ACTIVATION | grep -E -o “01020020201229[0-9]{16}” >applicationId2.txt

(2) 在某个文件夹下查找某个字段:find .|xargs grep “test”

(3)搜索高亮: tail –f file.log | grep --color=always true

;