指令个人记录

发布于:2024-10-12 ⋅ 阅读:(11) ⋅ 点赞:(0)

grep

返回file_name中包括11111的文本行

grep 11111 file_name
grep "11111" file_name  #字符串中含空格用双引号括起来
grep 11111 file_1 file_2 file_3

 -E正则表达式匹配

grep -E "[1-9]+"

 -v返回file_name中不包括11111的文本行

grep -v 11111 file_name

搜索命令行历史记录中 输入过 git 命令的记录

history | grep git

-c统计文件或者文本中包含匹配字符串的行数 

grep -c 11111 file_name

-l查找匹配文本在哪些文件中 ,返回文件名

grep -l 11111 file1 file2 file3...

 -r 递归查找

grep -r 11111 .
# .表示当前目录。

-i忽略匹配样式中的字符大小写

grep -i "HELLO"

-I使得grep在处理二进制文件时不进行匹配

grep -I "pattern" *

打印出匹配文本之前-A或者之后-B(之前&之后-C )的行: 

seq 10 | grep -A 3 "5" 

在grep搜索结果中包括或者排除指定文件

# 只在目录中所有的.php和.html文件中递归搜索字符"main()"
grep "main()" . -r --include *.{php,html}

# 在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"

# 在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist

grep  -r "pattern" .  --exclude-dir=".git"

-o只输出文件中匹配到的部分 

echo this is a test line. | grep -o -E "[a-z]+."
line.

-e 制动多个匹配样式:

echo this is a text line | grep -e "is" -e "line" -o
is
is
line

 -Z使得grep在输出/读取文件名时使用ASCII NUL字符(\0)代替通常的换行符

#-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件
grep "aaa" file* -lZ | xargs -0 rm
#-print0 告诉 find 命令以 ASCII NUL 字符(\0)作为分隔符来输出文件名,而不是使用换行符
find . -type f -print0 | grep -Z "pattern"
#file 1.txt\0
#file 2.txt\0

 -f从指定的文件中读取匹配规则,每行作为一个规则

grep -f rules.txt input.txt

 -m num 匹配 num 行后停止读取文件

grep -m 5 'example' *.txt

-q不进行标准输出。如果发现匹配项,则立即退出,并返回状态码0

if grep -q 'example' file.txt; then
    echo "Pattern found in file.txt"
else
    echo "Pattern not found in file.txt"
fi

-n在输出匹配行时显示其在文件中的行号

grep -n "pattern" file.txt

[root@ufo666 ~]# grep -n 'word' file.txt
2:This is a word
3:This is a word
4:This is a word
5:Another word here
6:A sentence without the wordss

pip

看当前环境包的版本

pip list

看某个特定包

pip show <包名>

 vim

常用

移动
n+上下左右箭头 移动n个字符/n行

0

光标移动到该行最前面字符
^ 到本行第一个不是blank字符的位置
$ 光标移动到该行最后面字符
g_

到本行最后一个不是blank字符的位置。

G 光标移动到文件最后一行
nG 光标移动到文件第n行
w 到下一个单词的开头(单词由字母,数字和下划线组成)
e 到本单词的结尾(单词由字母,数字和下划线组成)
W 到下一个单词的开头(单词是由blank字符分隔)
E 到本单词的结尾(单词是由blank字符分隔)
查找
/word 从当前光标处往下查找字符串word
?word 从当前光标处往上查找字符串word
n 重复前一个查找操作,若上一个操作为/word 则继续向下查找word;,若上一个操作为?word 则继续向上查找word
N 找上一个结果
* 和 #  匹配光标当前所在的单词(*向下,#向上)
复制
yy 复制光标所在行
nyy 复制光标所在的向下n行
删除
dd 删除光标所在行
ndd 删除光标所在向下n行
粘贴
p 将已复制数据粘贴在光标下一行
P 粘贴到光标所在行,原来内容下移
u 撤销前一个操作
. 重复前一个操作
ctrl+r 取消撤销
插入
i 光标所在处插入
I 光标所在行第一个非空格符号处插入
o 光标所在行下一行处插入新的一行
O 光标所在行上一行处插入新的一行
:w 将编辑的数据写入硬盘文件种
:q 退出vi
:wq 保存并退出
ZZ 若文件未被修改则不保存退出;若文件被修改,则保存后退出
:w filename 将编辑的数据另存为filename文件
:r filename 将filename文件内容加到当前光标所在行后
:e filename  打开一个文件
:set nu 显示行号
:set nonu 取消显示行号
cw 把光标位置到下一个单词之前的内容删掉
:q! 退出不保存 
:bn 和 :bp 可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。
% 所有行/匹配下一个括号,并匹配另一半
ctrl+p 自动补齐。insert模式下,先输入一个单词的开头,然后按
  • s/要替换的关键字/替换后的关键字 + 回车替换光标所在行的第一个(从左到右)满足条件的关键字
  • ​ s/要替换的关键字/替换后的关键字g + 回车替换光标所在行的所有满足条件的关键字
  • ​ %s/要替换的关键字/替换后的关键字 + 回车针对文件的所有行进行替换(每行满足条件的第一个关键字)
  • ​ %s/要替换的关键字/替换后的关键字g + 回车 针对文件的所有行进行替换(每行所有满足条件的关键字)

在n1到n2行之间寻找word1,并将word1替换为word2

:n1,n2s/word1/word2/g

在1到最后一行之间寻找word1,并将word1替换为word2,替换前提示用户进行确认(confirm)

:1,$s/word1/word2/gc

全局将word1替换为word2 

%s/word1/word2/g

0y$,从行头拷贝到行尾 

ye,从当前位置拷贝到本单词的最后一个字符

y2/foo,拷贝2个 “foo” 之间的字符串。

块选择

v或V进入visual 模式

v

字符选择,将光标经过的字符选择

V

行选择,将光标经过的行选择

y

将选中地方复制起来

d

将选中地方剪切

p 复制
ctrl+v 块选择
I# [ESC] 

I是插入,插入“#”,按ESC键来为每一行生效。

<action>a<object> 和 <action>i<object>

  • action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
  • object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。

假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 的位置。

  • vi" → 会选择 foo
  • va" → 会选择 "foo"
  • vi) → 会选择 "foo"
  • va) → 会选择("foo")
  • v2i) → 会选择 map (+) ("foo")
  • v2a) → 会选择 (map (+) ("foo"))

 

参考:

【Linux】vim常用命令_dit anyway-CSDN博客

vim区域选择_如何在vim中垂直从所有行中快速选择区域-CSDN博客