1. tr 按列替换
-
echo "{123}" | tr -d '{}'删除输入中的 "{" 和 "}" -
cat testfile |tr a-z A-Z将文件testfile中的小写字母全部转换成大写字母
2. cut : cut [-b] [file] 列切分
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
-
echo "123,456" | cut -d "," -f 1以","分隔截取输入中的每行的第一部分内容输出. -
who | cut -b 3以字节为分隔, 输出每行的第三个字节.-c是以字符为分隔 -
count=$(echo -e "${line}" | cut -f 2)其中,line中字符是以tab作为分隔符!
3. chown, chgrp, chmod 权限
sudo chgrp root * 修改当前目录下所有文件为root组
sudo chown root * 修改当前目录下所有文件的owner为root
sudo chmod 777 -R dir 递归修改dir的权限为777
sudo chmod 755 file.sh 修改file.sh为任何人可执行权限
4. sudo
-
sudo -l查看当前用户运行命令权限 -
sudo -u <user> command使用user用户执行命令command
5. uniq 去重
uniq -c file 在每行的旁边增加重复的数量。
6. nl 输出前加行号
-
nl file在输出的内容前加行号 -
nl -b a file遇到空行,也加行号。 -
nl -n rz -w 3 file行号3位对其,前面补0.
7. shuf 打乱文件顺序
shuf sort_file -o rsort_file
8. split 将文件切分
-
split -5000 file或split -l 5000 file将file按行切分成多个文件, 文件最大行为5000 -
split -5000 -d file以数字作为后缀,默认:xaa,xab,xac, 现在x00,x01,x02 -
split file.txt -b 10M将文件file.txt平均切分成10M
合并文件
-
cat x* > file.txt将以x开头的所有文件合并到file.txt`中 -
cat file1 file2 > file3将file1和file2合并保存到file3中.
文件内容顺序, 按照file1+file2的顺序保存到file3
模式切分csplit
将文本文件file以第 2 行为分界点切割成两份,命令: csplit testfile 2
文件求交,差,补
cat a b | sort | uniq > c # c 是 a 并 b
cat a b | sort | uniq -d > c # c 是 a 交 b
cat a b b | sort | uniq -u > c # c 是 a - b
9. sed按行操作文本(大文本操作)
大文本数据修改,编辑,保存,不能用编辑器打开,可以借助sed对大文件进行修改
sed编辑行以1为起始index!
详解
-e多次编辑
nl file | sed -e '3,$d' -e 's/bash/blueshell/' 删除第三行到最后一行,然后将1-2行中匹配bash的字符串替换成blueshell字符串
sed -e 4a\newLineContent file 在第四行后天添加一行内容newLineContent
-n仅显示script处理后的结果。
nl /etc/passwd | sed -n '5,7p' 仅列出文件的5-7行。
nl /etc/passwd | sed -n '/root/p' 仅列出匹配root的行
-i直接编辑源文件危险动作
sed -i 's/\.$/\!/g' file 将file的最后一行中的.替换成!
sed -i '$a # This is a test' file 在最后一行,再添加一行内容: # This is a test' file
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' 首先匹配所有bash行,然后执行{}里面的一组动作,替换bash为blueshell,p打印,q退出!
-e 接的动作:
-
a:新增, 在当前行的下一行添加,是新的一行 -
i:插入, 在当前行的上一行插入,是新的一行 -
c:取代 -
d:删除, 后面没有内容;
nl file | sed '2,5d' 删除第二到五行!
sed '2d' file 删除第二行
nl file | sed -n '/root/p' 删除所有行中包含root的行!
-
p:打印列。通常 p 与参数 sed -n 一起用 -
s:替换,/要被取代的字串/新的字串/g
使用
-
查找行号
grep -n --color '您的司机账户已被冻结' outbox.csv -
删除对应行号保存:
sed -e 5d file1 > ./file2删除第五行 并保存到当前目录下的file2文件中。 -
删除匹配项:
cat file1 | sed '/hello/d' > ./file2删除所有行中包含hello字符串的行保存。
nl file1 | sed '/hello/d' > ./file2 在每行内容前加一个行号,保存到文件中!
10. 只输出一行中匹配的字符串.
语法: grep -o 'regex'
less file* | grep type | grep -o 'user\[.*\]user_id' | grep -o '\[.*\]' | sort | uniq以file开头的所有文件中,每行包含type的字符串,提取字符串中以user[.*]user_id形式存在[]中的内容!
浙公网安备 33010602011771号