Linux命令实践

Linux常用命令记录

查找替换

将当前目录所有文件的intMAX字符串替换为INTd_MAX:

1
sed -i 's/intMAX/INT_MAX /g' `grep MAX_INt ./ -rl`

注:可以修改grep查找路径来指定目录。

仅查看当前目录所有.cpp和.c文件:

1
find ./ -maxdepth 1 -name '*.cpp' -or -name '*.c'

注:使用-maxdepth 1指定搜索的目录深度。去掉的话,则是递归搜索所有子目录。

代码格式化

去掉行尾多余空格

1
sed -i "s/[ ]*$//g" test.cpp

将tab键替换为4个空格

1
sed -i "s/\t/    /g" test.cpp

注:/t与/g之间有4个空格,表示替换为4个空格。

一个比较完整的脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

# 代码格式脚本,将tab替换成4个空格,将多余的行尾空格(含tab键)去掉。

# 要格式化代码的目录
SRC_DIRS="Applications BasicModules BussinessModules Include PlatformAPI"

# 如果有些目录不希望被格式化,在-o -path后面添加具体的相对路径(如下示例的PlatformAPI/test/googletest)。
SRC_DIRS_NEW=`find $SRC_DIRS \( \
-path PlatformAPI/test/googletest \
-o -path PlatformAPI/doxygen \
\) \
-prune -o -type d -print`

# 只针对cpp/c/h三种类型
SRCS=`find $SRC_DIRS_NEW -maxdepth 1 -name '*.cpp' -or -name '*.c' -or -name '*.h'`

for file in $SRCS;
do
echo "formatting" $file
#sed -i "s/[ ]*$//g" $file
#sed -i "s/\t/ /g" $file
done;

统计代码数量

统计当前目录所有.h .cpp文件文件行数(其它类型类推):

1
2
3
find . ! -name "." -name "*[.h|.hpp|.c|.cpp]"|xargs cat|grep -v ^$|wc -l

find . ! -name "." -name "*[.h|.hpp|.c|.cpp]" -type f | xargs cat | wc -l

统计当前目录.cpp文件个数

1
find . ! -name "." -name "*[.h|.hpp|.c|.cpp]"|wc -l

遗留:.h会匹配.sh文件,.c会匹配.cpp文件。

程序后台执行

有时需要在本地使用ssh连接到linux上执行命令或程序,但当连接断开时(断网或本机关机),程序会退出,使用nohup可以将程序放到后台执行,并且不随外界影响,当然,自身系统挂掉除外。示例:

1
nohup xxx & >> /tmp/output.txt

查找文件指定字符串出现第一次或最后一次位置

查找指定文件某字符串第一次出现位置:
命令:cat <文件名称> | grep -n "<字符串>" | head -n 1
示例:

1
cat log.txt | grep -n "MISCONF Redis is configured to save RDB snapshots" | head -n 1

查找指定文件某字符串最后一次出现位置:
命令:cat <文件名称> | grep -n "<字符串>" | tail -n 1
示例:

1
cat log.txt | grep -n "MISCONF Redis is configured to save RDB snapshots" | tail -n 1

解释:
先用cat命令查看文件内容,接着用grep搜索指定的字符串,注意要添加”-n”选项以便显示匹配字符串在文件中的行号,最后用head或tail显示查找到的内容的开头部分或结尾部分字符串,”-n 1”表示只显示一行,故能实现显示第一次或最后一次字符串。打开文件(notepad++或vs code使用ctrl+g快捷键)定位到行号即可。综上,使用管道可实现目的。

ls排序

默认:按字符升序,注:如文件名为1、2、10、20,排序后变成1、10、2、20

按时间:
ls -lt # 时间新的,排在前面,对比:ls -l、ls -lt
ls -ltr # 时间新的,排在后面

按大小排序:
ls -Slh # 由大到小,h表示以K、M、G单位显示
ls -Srlh # 由小到大,即文件体积大的在后面,在文件数量多时建议使用