经常有时候要用到某个命令的特殊功能,一时想不起来又要百度,所以就干脆专门整个博客来记录一下。
1、替换某行的某个字符串
sed -i '2 s/A/B/' file
该命令将file文件的第二行的A字符串替换为B字符串。
2、grep某个字符串并高亮显示
grep -r "string" --color file
该命令查找file文件或目录下包含string字符串的那行,同时高亮显示string字符串。CentOS系统不知从哪个版本开始,grep命令就默认带有–color参数了。
3、删除匹配字符串的下一行
sed -i '/string/{n;d}' file
该命令删除file文件中包含string字符串的下一行。
4、删除匹配字符串的上一行
sed -i 'N;/\n.*string/!P;D' file
该命令删除file文件中包含string字符串的上一行。其中N表示追加文本流中的下一行到模式空间并在二者间追加一个换行符;\n.*string表示匹配换行符及你需要匹配的字符串,!P表示不打印,这两个和在一起就是当前匹配的行不打印;最后D是删除当前模式空间的字符串,直到并包括第一个换行符。所以其思路是读取两行,匹配行不显示,后面删除的也就是上一行内容了。
5、删除两个字符串间的内容
sed -i '/stringA/,/stringB/d' file
该命令删除file文件中sringA和stringB字符串间的内容,包括stringA和stringB所在行。
6、bash命令里使用正则表达式匹配字符串
if [[ "aaab" =~ a+b ]];then echo ok;fi
该命令用正则表达式**“a+b”**匹配字符串,特别注意正则匹配表达式不能加双引号,否则会被当成字符串,而且,也要用[[ ]],不能用[ ]。
7、date命令打印年月日时分秒
date "+%Y-%m-%d %H:%M:%S"
8、替换换行符为空格
首先想到的是sed命令
sed -i 's/\n/ /g' file
但是并不能成功,因为sed读取一行时,会先把换行符去掉,处理完后再添加上,所以是看不到换行符的。可以使用echo命令
echo `cat file`
或者用tr命令
cat file | tr '\n' ' ' > bfile
因为tr命令替换所有换行字符,所以如果直接显示出来会和下一行提示符连在一起,如下图所示:
所以导入文件中后就能自动添加换行符。
9、查看local和main路由表
ip route list table local//查询local路由表
ip route list table main//查询main路由表
10、sed在指定行前新增行
sed -i '1 i new line string' /etc/my.conf
在/etc/my.conf文件中第一行前增加新行——new line string
11、sed在指定行后新增行
sed -i '1 a new line string' /etc/my.conf
在/etc/my.conf文件中第一行后增加新行——new line string