三-五、vi多行操作
删除:处于命令模式时,(dG将光标所在行以下的行删除;d1G将光标到第一行删除;这两个操作很猛)
:1 d(删除第一行)
:1,10d(删除第一到第十行)
:set nu显示行号,获取行号可大批量删除连续的行。
光标模式,dd删除光标所在行,Ndd删除光标所在行以及往下N行
复制:光标位置yy复制当前行,p粘贴;Nyy复制当前行往下N行。
命令行模式下输入
6,9 co 12
复制第6行到第9行之间的内容到第12行后面。
剪切:
dd:剪切光标所处当前行
n + dd:剪切光标所在行及以下共 n 行
按 p 粘贴在光标所在行
螢幕上僅列出 /etc/man_db.conf 的第 11 到第 20 行,且有行號存在?
答:
我們可以透過 cat -n 來帶出行號,然後再透過 head/tail 來擷取資料即可!所以就變成如下的模樣了:
cat -n /etc/man_db.conf | head -n 20 | tail -n 10
cat:concatenate(连续的)
/string #向后搜索字符串内容
?string #向前搜索
:r filename #在光标下读入filename的文件内容
vi中替换:
:s/ab/cd/ #替换光标当前行的第一个ab为cd;
:s/ab/cd/g #替换当前行所有的ab为cd
:2s/ab/cd/ #替换指定行(第二行)的ab为cd
:%s/ab/cd/g 替换所有行的ab为cd,不带g则替换每行的第一个;
设置自动缩进:set ai(autoindent);取消set noai
并排打开两个文件:vi -o f1 f2 #上下打开两个文件,ctrl+w,方向键切换光标;vi -O f1 f2#左右并排打开
nano多行操作:
复制,粘贴,剪切:
ctrl+6标记文件开头,移动光标选择文本块(反白显示),ctrl+k剪切,ctrl+u原地复制,之后光标可以移动到需要粘贴的地方,反复ctrl+u。(暂时没找到只是复制的操作,不需要cut的情况下)
dd文件复制和转换:
dd if=/dev/zero of=user_id bs=1M count=100 #if输入文件,of输出文件,bs每块大小,count(copy only N input blocks),生成100M的空文件user_id
seq 1000000 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 #批量生成1000000个1k大小的空文件,会快速耗尽文件系统inode;
建议在一个空文件夹内生成,不然利用rm -rf *.bat无法删除,会显示-bash: /bin/rm: Argument list too long,可通过删除文件夹删除。
拷贝文件时,排除某些不需要的文件:
1)使用xargs来做:
ls /tmp/test/ |grep -v .gz |xargs -i cp -r /tmp/test/{} /tmp/test_cp
2)使用find+cpio的方式:
find /tmp/test/ |grep -v .gz |cpio -pdm /tmp/test_cp/
3) 使用rsync来做:
rsync -avp --exclude = /tmp/test/xxx /tmp/test_cp/