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
形式存在[]
中的内容!