【shell】笔记|去重复行|删除匹配行|反选删除|反向显示|加减乘除
目录
配置 bash Shell忽略命令大小写 |按“上“键显示该命令的历史
shell 删除匹配行
shell 获取结果中的第n列,第n行
grep过滤
shell 注释块
Linux反选删除文件
Linuxrm删除指定文件外的其他文件方法汇总
rm删除除去指定文件的剩余所有文件 (rm 反向删除)
linux 删除其他文件
如何反向选择文件并删除
反向显示文件
shell去除重复行
shell按列排序
列column对齐
shell 定义分隔符和遍历行字段|IFS
shell 10进制转16进制
shell 加减乘除
shell 数组
显示历史命令和时间history
配置 bash Shell忽略命令大小写 |按“上“键显示该命令的历史
当按“上键”时,能够显示前一个历史命令。但是,这还 不太方便,下面的这个配置,可以让bash输入的命令头按“上“键显示该命令的历史,比如:输入 vim ,然后按”上“键,此时,可以显示上一次运行vim时
配置 linux 的 bash 忽略命令大小写 和 能根据输入的命令头按“上“键显示该命令的历史_nyist327的专栏-CSDN博客
一般情况下,bash对命令是区分大小写的,当按“上键”时,能够显示前一个历史命令。但是,这还 不太方便,下面的这个配置,可以让bash忽略大小写,而且,能根据输入的命令头按“上“键显示该命令的历史,比如:输入 vim ,然后按”上“键,此时,可以显示上一次运行vim时的那条命令,非常的方便!下面是该配置的内容,放在用户的home目录下面:shibo@iZ94wlxkhx8Z:~$ cat .inputrc
set completion-ignore-case on#For single press Tab results for when a partial or no completion is possible
set show-all-if-ambiguous on#For results when no completion is possible
set show-all-if-unmodified on#History completion bound to arrow keys (down, up)
"\e[A": history-search-backward
"\e[B": history-search-forward#Bash allows to quickly move between words with Ctrl+Left and Ctrl+Right
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word"
shell 删除匹配行
sed -i '/ddd/d' abc.txt
shell 获取结果中的第n列,第n行
grep Version|awk ‘{print $2}’ |sed -n ‘1p’ #获取第2列,第1行
print 后带的是你要获取第几列,sed -n 后带的是指定第几行。
grep Version|awk ‘{print $2 $4 $8}’ #获取第2列、4列、8列
grep过滤
【shell】用 grep 查找包含字符串的文件|grep 过滤|取匹配行的前后n行_bandaoyu的note-CSDN博客_grep查询包含关键字的文件
shell 注释块
方法四
if false ; then 被注释的多行内容 fi
不能如下使用:
if false ; then #被注释的多行内容 不能加#fi
删除掉
function scandir(){
for filename in `ls $1`
do
if [ -d $1'/'$filename ] ; then
echo $1'/'$filename
scandir $1'/'$filename
else
echo $filename
fi
done
}
read file
scandir $file
#如果文件夹不存在,创建文件夹 if [ ! -d " /myfolder " ]; then mkdir / myfolder fi #shell判断文件,目录是否存在或者具有权限 folder= " /var/www/ " file= " /var/www/log " # - x 参数判断 $folder 是否存在并且是否具有可执行权限 if [ ! -x " $folder "]; then mkdir " $folder " fi # - d 参数判断 $folder 是否存在 if [ ! -d " $folder "]; then mkdir " $folder " fi # -f 参数判断 $ file 是否存在 if [ ! -f " $file " ]; then touch " $file " fi # - n 判断一个变量是否有值 if [ ! -n " $var " ]; then echo " $var is empty " exit 0 fi # 判断两个变量是否相等 if [ " $var1 " = " $var2 " ]; then echo ' $var1 eq $var2 ' else echo ' $var1 not eq $var2 ' fi
#!/bin/bash
ps_out=`ps -ef | grep $1 | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep "$1")
if [[ "$result" != "" ]];then
echo "Running"
else
echo "Not Running"
fi
if [ -z $processExist ];then
exec processName
else
echo "process is running"
fi
-d 是否为目录
-d :判断制定的是否为目录
-z:判断制定的变量是否存在值
-f:判断制定的是否为文件
-L:判断制定的是否为符号链接
-r:判断制定的是否可读
-s:判断存在的对象长度是否为0
-w:判断制定的是否可写
-x:判断存在的对象是否可以执行
!:测试条件的否定符号
这些文件操作很多时候给脚本编程带来方便,尤其是用在if条件语句中
find 要查找的目录名 -name .svn |xargs rm -rf
删除指定名称的文件或文件夹: find -type d | grep .svn$ | xargs rm -r
分析:
find -type d | grep .svn$ 通过此命令查找文件夹 过滤正则表达式中的目录
| xargs rm -r 执行删除指令
删除目录下所有exe文件
find . -name '*.exe' -type f -print -exec rm -rf {} ;
(1) "." 表示从当前目录开始递归查找
(2) “ -name '*.exe' "根据名称来查找,要查找所有以.exe结尾的文件夹或者文件
(3) " -type f "查找的类型为文件
(4) "-print" 输出查找的文件目录名
(5) 最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号
- 通过以上操作我们可以看到,find命令不单查询了/enterprisedb_backup/postgresql/目录,并且遍历了所有子目录,而此时子目录已经随着上一步母文件夹的删除而删除,所以找不到了。
解决方案:
- 整理思路后,可以确认,如果find只找出所需操作目录的第1层文件及目录即可解决此问题
- 通过伟大的 man 命令我们得到以下信息
- 测试操作确认修改为: 这里意思是说:-mtime找到的信息可能会操过-maxdepth的范围,在find操作中建议-maxdepth放在所有其他参数的前面
Linux反选删除文件
最简单的方法是
如果是多个要排除的,可以这样:
Linuxrm删除指定文件外的其他文件方法汇总
一、Linux下删除文件和文件夹常用命令如下: 删除文件: rm file
删除文件夹: rm -rf dir
需要注意的是, rmdir 只能够删除 空文件夹。 二、删除制定文件(夹)之外的所有文件呢?
1、方法1,比较麻烦的做法是:
复制需要保留的文件到其他文件夹,然后将该目录删除, 然后将需要保留的移动 回来。 mv keep ../ #保留文件(夹) keep
rm -rf * #删除当前文件夹里的所有文件 mv ../keep ./ #将原来的东西移动回来
2、方法2,需要在当前文件夹中进行:
rm -rf !(keep) #删除keep文件之外的所有文件
rm -rf !(keep1 | keep2) #删除keep1和keep2文件之外的所有文件
3、方法3,当前文件夹中结合使用grep和xargs来处理文件名: ls | grep -v keep | xargs rm #删除keep文件之外的所有文件
说明: ls先得到当前的所有文件和文件夹的名字, grep -v keep,进行grep正则匹配查找keep,-v参数决定了结果为匹配之外的结果,也就是的到了keep之外的所有文件名,然后 xargs用于从 标准输入获得参数 并且传递给后面的命令,这里使用的命令是 rm,然后由rm删除前面选择的文件。
好处:使用了grep来正则表达式来匹配文件名字,可以一次保留多个文件,从而进行更加准确的处理。
4、方法4,使用find命令代替ls,改进方法3从而能够处理制定文件夹的文件:
find ./test/ | grep -v keep | xargs rm #删除当前test文件夹中keep文件之外的所有文件
说明,用grep而不用find -name选取名字,因为find选取名字时比较麻烦,对正则表达式支持不够,无法排除指定文件名。
5、方法5,直接使用find命令删除其他文件:
find ./ -name '[^k][^e][^e][^p]*' -exec rm -rf {} \; #删除keep以外的其他文件。 find ./ -name '[^k][^e][^e][^p]*' | xargs rm -rf #删除keep以外的其他文件。推荐!
说明:上面第二行的代码效率高些,原因在于删除多个文件时 -exec会启动多个进程来处理,而xargs会启动一个rm进程来处理。
关于find 执行命令的效率和借用xargs启动的命令效率的比较,详情请参考:http://www.linuxsir.org/main/?q=node/137
Linux文件查找命令find,xargs详述 http://www.linuxsir.org/main/?q=node/137 本文转载自:http://blog.sina.com.cn/s/blog_70ffb5c501011rrk.html
rm删除除去指定文件的剩余所有文件 (rm 反向删除)
1 23sdfwe 88888888 aabb ag ghdda mmm
2 3 aaaaaaaa abc asdg llllllll wwwww
zhou@zhou:~/LinuxC/file/test$
然后我想删除除了包含字符串aa外所有的文件,也就是想留下aabb,aaaaaaaa,这两个文件, 其他的全部删除
下面是我的命令:
zhou@zhou:~/LinuxC/file/test$ rm `ls | grep -v"aa"`
zhou@zhou:~/LinuxC/file/test$ ls
aaaaaaaa aabb
zhou@zhou:~/LinuxC/file/test$
所以了,成功了。
简单的解释一下那条命令吧:rm 删除后面指定的文件
`ls | grep -v "aa" ` 记得外面是反引号( 反引号的位置就在标准键盘的数字1的左边),
整体再顺一下:列出文件名不带“aa”串的文件,然后删除他们。OK。
其实说起来简单,当时我也做了好长时间,因为以前没怎么接触grep,因此一开始我想到的办法是使用 正则表 达式,但是在做的过程中突然发现了grep使个不错的东西,因此就使用了。
上面的命令使删除带有“aa”串的文件,那如果我只想留下文件aa呢?很简单
zhou@zhou:~/LinuxC/file/test$ rm `ls | grep -v"^aa$" ` 在aa前面加上^,后面加上$表示结束符的意思,这个就是完全匹配了。
好了,就这么多。但愿以后能用到这个有用的命令
转自:http://blog.sina.com.cn/s/blog_67e34ceb01014930.html
linux 删除其他文件
http://zhidao.baidu.com/link?url=uvHfrb3kSnM_8p5ILhZyc39U0h3md-Ncrm3iaygeYTLU-zjthNBlqO674VulVGTnPiNcl2nj7wo5vn08N4481_
求教 linux centos我想删除某目录中文件名不符合"*20100330*"这样规则的文件应该怎么删除?
假设目录名为myTest且为当前目录的下一级目录,使用如下命令即可:
cd ./myTest && rm `ls | grep -v '20100330'` && cd ..进入myTest目录,删除文件后返回当前目录。grep的-v参数表示反向选择。一般使用rm删除文件的时候会有确认提示,如果不要确认,直接强制删除,可以使用rm的-f参数。
其他1条回答
find ./ -type f \! -name "*20100330*" -exec rm -rf {} \;
如何反向选择文件并删除
http://bbs.csdn.net/topics/390077765
案例:一个文件夹下我想删除 除了abc文件 之外的所有文件,命令怎么写(linux下)
find . -maxdepth 1 -type f -not -name 'abc' -exec rm '{}' ';'
ls | grep -v abc | xargs -i rm -rf {}
rm -f `ls | grep -v abc`
如果文件很多的情况下,不要用这种方法……
要用2楼的方法……
mv abc /tmp
rm *
mv /tmp/abc .
反向显示文件
使用ls命令仅仅显示当前目录不包括.的文件.
ls加grep过滤的方式:ls -al | grep -v '\.'(ls --ignore=.* -al也可实现)。
在打开extglob模式下(缺省是打开的),ls也可以实现,而且更加灵活.
shopt -u extglob #关闭
shopt -s extglob #打开
ls -al !(*.*)
ls -al -d !(*.*)
删除文件时排除特定文件
删除当前目录下所有 *.txt文件,除了test.txt
1
2
3
4
5
6
7
8
|
rm ` ls *.txt| egrep - v test .txt`
#或者
rm ` ls *.txt| awk '{if($0 != "test.txt") print $0}' `
#排除多个文件
rm ` ls *.txt| egrep - v '(test.txt|fff.txt|ppp.txt)' `
rm -f ` ls *.log.1| egrep - v '(access-2010-09-06.log|error-2010-09-06.log)' `
rm -f ` ls *.log| egrep - v '(access-2010-09-06.log|error-2010-09-06.log)' `
rm -f ` ls *.log| egrep - v '(20100906.log)' `
|
注意:上面所用的符号是‘`’,而不是单引号
这里是用ls得到原始数据,也可以用find命令
rm `find . -name *.txt | egrep -v ‘(test.txt|fff.txt|ppp.txt)'`
==========================================
egrep是grep的扩展, egrep除了具备grep的基本功能外还可以使用附加的正则表示式元字符, 如
[a-z]+A
[a-z]?A
[a-z]|[a-z]
abc(d|e)
等, 另外egrep不允许使用\(\)和\{\}(摘自:http://www.pythontab.com/html/2013/linuxkaiyuan_0205/214.html)
《Shell while read命令完成用户的交互输入》
Shell while read命令完成用户的交互输入_Harvey-CSDN博客_shell while 输入
shell去除重复行
注:uniq只对相邻行做比较,所以要先sort先排序下以使重复行相邻,才能完成去重复
sort -n aa.txt | uniq > bb.txt
grep -nR " handle_osd_ping" ceph-osd.3.log|sort |uniq
对指定列去重复
Linux sort 排序命令&&uniq去重复;https://www.jianshu.com/p/c9f79d7caa66
sort -t $'\t' -k 3,3 -u filename #-t 指定分隔符为‘\t’
sort -t ' ' -k 3,3 -u filename #-t 指定分隔符为' '
sort -t ',' -k 1,1 -u
其中 -t 指定列之间的分隔符, -k 指定从第几列到第几列作为去重标准
linux sort 按列去重:https://blog.csdn.net/wqfhenanxc/article/details/81937584
shell按列排序
sort 排序命令
-t 指定分隔符
-k 指定第三列排序
-u 去重
sort的其他一些选项:
-r 降序排列
-n 看为数字来比较 (如果按字符比较10 比2小,因为第一个字符比2小)
列column对齐
可以将文本结果转换为整齐的表格,上下对齐
命令: Column
使用的参数:
-t :表格,默认以空格间隔
-s:需要配合-t使用,指定分隔符
实例:
未对齐:
[oracle@db ogg]$ (echo info all;echo exit)|./ggsci|grep -E "EXTRACT|REPLICAT" |awk 'BEGIN {FS=" +"} {print $3,$2,$4,$5}'
DP_XNJC RUNNING 00:00:00 00:00:04
XNJC RUNNING 00:00:00 00:00:07
对齐
[oracle@db ogg]$ (echo info all;echo exit)|./ggsci|grep -E "EXTRACT|REPLICAT" |awk 'BEGIN {FS=" +"} {print $3,$2,$4,$5}' |column -t
DP_XNJC RUNNING 00:00:00 00:00:06
XNJC RUNNING 00:00:00 00:00:09
shell 定义分隔符和遍历行字段|IFS
例如将IP 192.169.31.166转十六进制,IFS="." 以“.”为分隔符
ip_to_hex2.sh
function ip4_to_hex()
{
hexip=""
IFS="."
num=0
for str in $1
do
ip[num]=${str}
((num++))
done
hexip=`printf "%x%x:%x%x" ${ip[0]} ${ip[1]} ${ip[2]} ${ip[3]}`
}
./ip_to_hex2.sh 192.169.31.166
shell 10进制转16进制
dec2hex(){printf "0x%x" $1
}a=$(dec2hex 2131165531)
echo $a
shell 加减乘除
#!/bin/bash
a=$1
b=$2
echo a+b=$(($a+$b))
echo a-b=$(($a-$b))
echo a*b=$(($a*$b))
echo a/b=$(($a/$b))
echo a%b=$(($a%$b))
echo a**b=$(($a**$b))上面优化版#!/bin/bash
echo $1=(($1))
echo $((3==4)) 不相等结果为0 相等结果为1
#/bin/basha=1
while [ $a -le 100 ] #((a<=100))dolet sum=sum+a #((sum+=a))let a++ #((a++))
done
echo $sum
浮点数
shell计算中使用除法,基本默认上都是整除。
比如:
num1=2
num2=3
num3=`expr $num1 / $num2`
这个时候num3=0 ,是因为是因为expr不支持浮点除法
解决的方法:
num3=`echo "sclae=2; $num1/$num2" | bc`
使用bc工具,sclae控制小数点后保留几位
还有一种方法
awk 'BEGIN{printf "%.2f\n",’$num1‘/’$num2‘}'
如果用百分比表示
awk 'BEGIN{printf "%.2f%\n",(’$num1‘/’$num2‘)*100}'
shell 数组
Shell 数组 | 菜鸟教程
显示历史命令和时间history
history 显示历史命令
让 history 命令显示日期和时间
echo 'HISTTIMEFORMAT="%F %T "' >> /etc/profile
source /etc/profile
【shell】笔记|去重复行|删除匹配行|反选删除|反向显示|加减乘除相关推荐
- sed删除匹配行的上一行和下一行
1.删除匹配行的上一行和下一行: sed -i -e '/string/{n;d}' -e '$!N;/\n.*string/!P;D' file 2.sed中使用变量,删除匹配行的上一行和下一行: ...
- 使用sed删除匹配行的上一行和下一行
1.删除匹配行的上一行和下一行: sed -i -e '/string/{n;d}' -e '$!N;/\n.*string/!P;D' file 2.sed中使用变量,删除匹配行的上一行和下一行: ...
- sed 删除匹配行的前后行
2019独角兽企业重金招聘Python工程师标准>>> 删除匹配行的前后行 删除匹配行的下一行 sed -ne 'p;/niyaopipeideneirong/n' nidewenj ...
- linux 命令sed命令指定行或匹配行插入行
sed -i "231s:.*:hello:g" file #将第231行的所有字符替换为hellosed -i '$d' file #将文件file的最后一行删除sed -i & ...
- Sed 删除匹配行,匹配的字符用Shell变量替换,且变量里含有斜杠“/”时,无法删除 解决办法
原文链接: https://zhidao.baidu.com/question/2138070399877009148.html 修改语法,用#代替",这个只能用在sed的s替换命令中,如: ...
- sed打印、删除匹配行
删除以a开头的行 sed -i '/^a.*/d' tmp.txt 反向删除: sed -i '/green/!d' colors 删除不包含green的行. 多pattern或匹配: sed '/o ...
- sed常见用法,删除匹配行的上2行,下3行
删除匹配的下一行到最后一行 [root@test200 ~]# cat test a b c d e f [root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test ...
- linux bash shell sed 删除匹配行
[yeqiang@harbor tmp]$ cat a.txt aaa bbb ccc [yeqiang@harbor tmp]$ sed -i '/aaa/d' a.txt [yeqiang@har ...
- sed 删除匹配行的指定字符串
这里以nginx配置文件为例,修改日志格式. log_format main '$remote_addr - $remote_user [$time_local] "$request&quo ...
最新文章
- python vs javascript_Python“是”vs JavaScript===
- python pip安装提示Consider using the `--user` option or check the permissions.
- vscode设置成中文完整步骤
- matlab raw函数,用matlab处理Raw格式的图像文件的方法
- POJ 1562深搜判断连体油田个数
- InputStreamReader和 OutputStreamWriter
- 数据结构之队列的定义与简单实现
- 朴素贝叶斯常见面试题
- 全网首发:使用命令行编译VS工程为Win32/x64
- 全面剖析《自己动手写操作系统》第五章---makefile文件
- 核磁共振成像基本原理——杨正汉(1)
- 如何禁止Chrome浏览器版本自动更新的方法
- jQuery手动触发事件
- css linux 等宽字体,css 等宽字体有哪些
- 关于IE上embed自动播放
- 免杀横向移动工具WMIHACKER
- ubuntu安装以太方mist
- Python数据分析入门书籍推荐!!!强烈推荐,新手必看
- NOIP2016——蚯蚓
- 那些好用的iOS开发工具
热门文章
- 用Python 做成语接龙,超简单,有语音,过年和孩子玩
- 槐香拂过,你如期而至
- 元宇宙是什么?解密扎克伯格的“元宇宙梦”
- 解决使用layui上传文件时提示“请求上传接口出现异常”
- 技术宅记录下看过的番
- 为什么要找一个不提倡加班的工作?是我我们太懒,不求上进吗?
- sqlserver 人名_SQLserver运维必备:T-SQL语句练习
- java阿拉伯转大写_java 中大写数字与阿拉伯数之间的相互转换 | 学步园
- 为什么量化交易中盈利的稳定性比利润率重要
- MT4客户端通讯分析(一)——登录部分分析