sed命令
sed命令行格式为: sed [-nefri] ‘command’ 输入文本
- 常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
set -n ‘20,30p’ 文件 常与p结合使用
set -参数 ‘/条件/ c\ sfdasf’ 文件
-e∶直接在指令列模式上进行 sed 的动作编辑;
set -e -n 20,30p’
a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
sed ‘/100/ a bbb’ 文件
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
sed ‘/^9/d’ count.log
sed ‘100d’ count.log
sed ‘2,$d’ count.log
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
要替换时,如果“原内容”或“新内容”中含有特殊字符(比如”/”或者”#”等),可以使用其它符号把各部分隔开,比如以下几种格式都是正确的
sed -i ‘s,原内容,新内容,g’ 文件
sed -i ‘s#原内容#新内容#g’ 文件
sed -i ‘s:原内容:新内容:g’ 文件
sed -i ‘s~原内容~新内容~g’ 文件
匹配规则:
. 匹配任意一个字符
* 匹配0 个或多个*前的字符
^ 匹配行开头
$ 匹配行结尾
awk命令
格式
格式:awk -F: ‘BEGIN {处理文件前执行的代码块} {处理文件过程中执行的代码块} END {处理文件后执行的代码块}’ filename
如:
cat count.log|awk ‘BEGIN{a=1;b=2}{print $(a+b)}END{print $1}’
awk -F: ‘BEGIN {print “这是第一行”} {print $0} END {print “这是最后一行”}’
print $1,$2 打印多个用逗号,$0代表整行。
其中+和?只适用于awk而不适用于grep或sed:
+ 匹配一个或一个以上前面的单字符
? 匹配0个或一个前面的单字符
举例:
/XY+Z/ 匹配XYZ、XYYYYZ
/XY?Z/ 匹配XYZ、XZ
~ 匹配正则表达式
!~ 不匹配正则表达式awk有许多内置变量用来设置环境信息,常用的有
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk读取的文件名
FNR 当前文件已处理的记录行数
FS 设置域分隔符,相当于-F
NF 域的列数
echo ‘/user/apache/conf/httpd.conf’|awk -F/ ‘{print $NF}’
NR 已处理的记录总行数
OFS 设置输出字段域分隔符
RS/ORS 换行符举例
awk ‘{name=$1;belts=$4;if(belts ~ /Yellow/) print name “is belt “belts}’ grade.txt
awk ‘{if($1==”ley”)$7=$7-40; print $0}’ grade.txt
awk ‘BEGIN{print “Name\tDifference”}{if ($6<$7){$8=$7-$6;print $1,$8}}’ gra //模拟第8列出来
awk ‘BEGIN {print “Name\tDifference”} {if ($6 < $7) {diff = $7 - $6; print $1,diff}}’ grade.txt //同上,不模拟列,直接给变量
awk ‘total+=$6;END{print total}’ grade
awk ‘{total+=$6;END{print total}}’ grade*
//区别: 上面的所有内容就将会打印出来,下面的只会打印结果函数
awk有很多强大的字符串函数:
gsub(r,s,t) 在整个字符串t中用字符串s替代所有满足正则表达式r的字符串(如没指定t则默认为$0)
index(s,t) 返回字符串s中字符串t第一次出现的位置(如不存在则为0)
length(s) 返回s字符串的长度(如没指定s则默认为$0)
match(s,r) 返回第一个满足正则表达式r的字符串在s字符串里面的位置(如无匹配的则为0)
split(s,a,sep) 使用sep将字符串s分隔成为数组a的元素,返回数组元素的数量(如果没指定分隔符则默认与FS相同用法)
sprint(“fmt”,exp) 使用printf的格式说明对表达式exp 进行格式化输出
sub(r,s,t) 在字符串t中用s字符串替换满足正则表达式r的第一个字符串,返回1如果成功,否则返回0(如没指定t则默认为$0)
substr(s,p,n) 返回字符串s中以p位置开始长度为n的字符串(如果没指定n则返回从p位置开始的所有字符串)
tolower(s) 将字符串s中的所有大写字母转换为小写,返回转换后的字符串
toupper(s) 将字符串s中的所有小写字母转换为大写,返回转换后的字符串
vim
插入命令
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行查找命令
ngg 12gg 跳转12行 或者 :12
/xxx ?xxx 向上查找 向下查找
ctrl + f 向下翻页 同 page down.
ctrl + b 向上翻页 同 page up.
ctrl + d 向下翻半页 此比较有用
ctrl + u 向上翻半页 此比较有用
ctrl + e 向下翻一行
ctrl + y 向上一行
跳到文本的最后一行:按“G”,即“shift+g”其他常用
u 撤销(Undo)
Ctrl + r 重做(Rx 删除当前字符edo),即撤销的撤销。
x 删除当前字符
dd 删除当前行
10d 删除当前行开始的10行。
其他常用
加载文件顺序
etc/profile–>~/.bash_profile–>~/.bashrc–>/etc/bashrc
source /etc/profile 重新加载该文件