Linux最近常用命令
1.Linux_shell条件判断if中的-a到-z的意思
https://www.cnblogs.com/liupuLearning/p/6206415.html
[ -a FILE ] 如果 FILE 存在则为真。
[ -z STRING ] “STRING” 的长度为零则为真。
复杂逻辑判断:
-a 与
-o 或
! 非
2.shell中的${},##和%%的使用
https://blog.csdn.net/liangxiaoxi7/article/details/80649301
https://www.cnblogs.com/nkwy2012/p/9171408.html
https://blog.csdn.net/u013402321/article/details/80333272
(2) ${var:+string}
规则和上面的完全相反
即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量var的值,即空值
[root@bogon ~]# a=ajax
[root@bogon ~]# echo $a
ajax
[root@bogon ~]# echo ${a:+bbc}
bbc
[root@bogon ~]# echo $a
ajax
[root@bogon ~]# unset a
[root@bogon ~]# echo $a
[root@bogon ~]# echo ${a:+bbc}
[root@bogon ~]#
mkdir ./ll
affix=1a
dir=./ll
dir=$dir${affix:+_$affix}
echo $dir
显示输出:./ll_1a
3. cat–EOF
cat <<EOF
This script is intended to be used with GPUs but you have not compiled Kaldi with CUDA
If you want to use GPUs (and have them), go to src/, and configure and make on a machine
where "nvcc" is installed.
EOF && echo 0
显示输出:
This script is intended to be used with GPUs but you have not compiled Kaldi with CUDA
If you want to use GPUs (and have them), go to src/, and configure and make on a machine
where "nvcc" is installed.
EOF && echo 0
cat <<EOF && echo 0
This script is intended to be used with GPUs but you have not compiled Kaldi with CUDA
If you want to use GPUs (and have them), go to src/, and configure and make on a machine
where "nvcc" is installed.
EOF
显示输出:
This script is intended to be used with GPUs but you have not compiled Kaldi with CUDA
If you want to use GPUs (and have them), go to src/, and configure and make on a machine
where "nvcc" is installed.
EOF
0
4.grep命令详解
https://www.cnblogs.com/wangcp-2014/p/5146335.html
-v或--revert-match 反转查找。
-V或--version 显示版本信息。
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
grep -n pattern files 即可显示行号信息
grep -c pattern files 即可查找总行数
这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
‘^’:指匹配的字符串在行首,
‘$’:指匹配的字符串在行 尾,
5. awk命令详解
https://blog.csdn.net/jin970505/article/details/79056457
-v var=value or –asign var=value
赋值一个用户定义变量。
cat <<EOF > log.txt
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
EOF
echo haha
cat log.txt
awk '{print $1,$4}' log.txt
结果:
haha
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
2 a
3 like
This's
10 orange,apple,mongo
awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ” 只能用单引号
awk ‘{print $1,$4}’ log.txt $1 $4代表每一行的第一列和第四列
待完善。。。
6. split
split -l row_num raw_filename
row_num 每个文件要拆分的行数
raw_filename 要使用split进行拆分的大文件
$ split -6 README #将README文件每六行分割成一个文件
以上命令执行后,指令"split"会将原来的大文件"README"切割成多个以"x"开头的小文件。而在这些小文件中,每个文件都只有6行内容。
$ ls #执行ls指令
#获得当前目录结构
README xaa xad xag xab xae xah xac xaf xai
https://www.runoob.com/linux/linux-comm-split.html
7. shell表达式 ${file##*/}"
file=/dir1/dir2/dir3/my.file.txt
#可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
${file##*.}:删掉最后一个 . 及其左边的字符串:txt
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)
${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
target=${source_dir%?} # 去掉字符串最后一个字符
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
?表示零个或一个任意字符
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
原文:https://blog.csdn.net/yifansj/article/details/78354365
https://blog.csdn.net/yuchunhai321/article/details/82585847
8. while read line
while read line
do
...
done < var
# 从var变量中按行遍历读取, line是保存一行数据的变量
https://blog.csdn.net/qq_22083251/article/details/80484176
9. shell 字符串索引
# 获取变量source_str的最后一个字符
last_char=${source_str: -1}
https://www.jb51.net/article/121290.htm
https://baijiahao.baidu.com/s?id=1606425493933114713&wfr=spider&for=pc
https://blog.csdn.net/qq_36741436/article/details/78733348
10. echo -en
echo -n 不换行输出
echo -e 处理特殊字符
若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
原文:https://blog.51cto.com/13673885/2117635
11. echo 给显示文字添加颜色
SETCOLOR_SUCCESS="echo -en \\033[1;32m" # 成功 绿色32
SETCOLOR_FAILURE="echo -en \\033[1;31m" # 失败 红色31
SETCOLOR_NORMAL="echo -en \\033[0;39m" # 正常 清除设置的颜色
SETCOLOR_WARNING="echo -en \\033[1;33m" # 33-黄色
echo -n 不换行输出
echo -e 处理特殊字符
\\ 插入\字符;
echo -e "\033[颜色1;颜色2m 要展示的文字 \033[0m" 给要显示的内容添加颜色
m:转义序列的终止标志。
\033[0m:表示将颜色恢复回原来的配色
http://c.biancheng.net/linux/echo.html
12. vim编辑器多行注释多行取消注释
1. 插入注释
(1)首先按键盘上的ESC进入命令行模式
(2)再按Ctrl+V进入VISUAL BLOCK模式
(3)利用上下左右键调整需要注释多少行以及行的宽度
(4)再按Shift+i或s进入插入模式
(5)输入代表注释的符号,比如#
(6)再次按ESC键,这时就可完成多行注释(可能需要等上一会,不要着急)
2. 去注释
前三步与加注释相同。
(1)首先按键盘上的ESC进入命令行模式
(2)再按Ctrl+V进入VISUAL BLOCK模式
(3)利用上下左右键调整需要去注释多少行以及行的宽度
(4)再按d即可完成去注释
原文:https://blog.csdn.net/step_ma/article/details/76474864
13. shell变量使用双引号
- 单引号
使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 - 双引号
如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双引号中的变量名以及命令原样子输出。
https://www.cnblogs.com/lonecloud/p/9066199.html