第四版的鸟哥私房菜 部分命令总结
ctrl+u 删除光标往前的命令 ctrl+k 删除光标往后的命令
cut -d 分隔符 cut -f 依据-d的分隔字符将一段讯息分区成为数段,用-f 取出第几段的意思
nl /etc/shadow | cut -d":" -f 1
cut -c 1-4 第一个字符到4第四个字符(包括中间空格)就像截取
echo "12345" | cut -c 1-3
123
cut -c 1 截取第1个字符以后的所有字符串
echo "12345" | cut -c 1
1
sort -b 忽略最前面空格的部分
cat log.txt |sort
10 There are orange,apple,mongo
2 that is a test
3 Are you like awk
aaasdfsdf
aaksdjf
abdgdsg
that is a Testi
that's a test
sort -k 以哪个区间作为排序 sort -t 指定分隔符
cat sort.txt --原文
a fox is a fox
a dog is a dog
an elephant is an elephant
every anamials is very happy
but not in the zoo
i think i am right
cat sort.txt |sort -t " " -k 1 按空格分开,并且按第1列排序
a dog is a dog
a fox is a fox
an elephant is an elephant
but not in the zoo
every anamials is very happy
i think i am right
cat sort.txt |sort -t " " -k 2 按空格分开,并且按第2列排序
every anamials is very happy
a dog is a dog
an elephant is an elephant
a fox is a fox
but not in the zoo
i think i am right
sort -M 以月份排序
这个有点奇怪,我怎么排都不会按照help里面的 JAN<xxx<DEC 来排
. 文件为什么是最大的?
sort -u 重复的数据只出现一行
sort -n 使用纯数字排序
sort -f 忽略大小写差异
sort -h 使用易读性数字
sort -r 反向排序默认是升序
按文件夹大小排序
du -h | sort -hr
uniq -c 统计次数 uniq -i 忽略大小写
wc -l 仅列出多少行 wc -w 仅列出多少字 wc -m 多少字符 wc -c 多少比特(大小) wc 默认参数为lwc
tee 命令
tee -a 追加的形式加入文件
cat j.txt | tee -a log.txt
同时把j.txt 的内容打印到屏幕和log.txt 里面
[tr] translate
tr -c 替换所有不属于第一字符集的字符
echo "abcdef" | tr -c 'abc' 'D'
abcDDDD
tr -d 删除所有属于第一字符集的字符
echo "jack love china" | tr -d 'klov'
jac e china
tr -s 把连续重复的字符以单独一个字符表示
echo "jackloooooooveeeeehuahuahuaaaaa" | tr -s "oea"
jacklovehuahuahua
tr -t 先删除第一字符集比第二字符集多出的字符,然后建立映射,然后再替换
echo "the quick brown fox jumps over a lazy dog " | tr -t "abcdef" "12345"
th5 qui3k 2rown fox jumps ov5r 1 l1zy 4og
ps:注意f没有变化(fox)
tr '[a-z]' '[A-Z]' 小写变大写
echo "the quick brown fox jumps over a lazy dog " | tr '[a-z]' '[A-Z]'
THE QUICK BROWN FOX JUMPS OVER A LAZY DOG
[grep]
grep -n 匹配文本文件时会显示行号
grep -v 反向选择,即没有匹配到的才被搜索出来。
grep -i 不区分大小写,大小写视为相同
grep -c 计算找到‘搜寻字符串’的次数
grep -d 查找的是目录而不是文件
[awk]
last -n 5 | awk '{print $1}'
vagrant
vagrant
reboot
vagrant
vagrant
wtmp
2 设置分隔符
sudo head -n 5 /etc/shadow| awk '{FS=":"} {print $1}'
root:x:17938:0:99999:7:::
daemon
bin
sys
sync
指定了FS为“:” 打印第一列,但是第一个root却没有。
因为读入第一行的时候,那些变量 $1,$2,$3…… 默认还是以空格为分隔呢,虽然定义了FS=":",但是却
仅能在第二行后才开始生效,要解决这个问题,需要先预设定awk,利用BEGIN 关键词
或者使用内置变量 -F
head -n 5 /etc/shadow| awk -F ':' '{print $1}'
3 预设变量
head -n 5 /etc/shadow| awk ' BEGIN {FS=":"} NR <= 3 {print $1}'
root
daemon
bin
NR 代表行数,NF 每一行拥有的字段总数,FS 分隔符
[sed]
sed -i 插入到某行前面
sed '4i content'
sed -n 沉默方式显示 通常和p搭配
sed -n '1,2p' log.txt //只打印1,2行
sed -n '/like/p' log.txt //打印有like的行
sed '4a 添加在指定行的后面一行'(如果没有指定的行,则不会改变显示的内容。如果忽略了a前面的数字,则每行都改变,而i 添加在指定行的前面一行。最后一行用$a,$i)
sed '4a hhh' log.txt
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
hhh
sed '4i hhh' log.txt
2 this is a test
3 Are you like awk
This's a test
hhh
10 There are orange,apple,mongo
//每一行
sed 'a every' log.txt
2 this is a test
every
3 Are you like awk
every
This's a test
every
10 There are orange,apple,mongo
every
sed -e 多个指令的时候前面要加-e,还可以跟脚本
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
//把passwd 第3到最后一行删除,并且把bash改成blueshell
删除1,2行
sed '1,2d' //删除1,2行
sed '2,$d' log.txt 删除 第2到最后一行
替换文本 sed s :取代,可以直接进行取代的工作。
sed -e 's/this/that/i' log.txt //把this替换成that i是不区分大小写.
sed 不支持非贪婪匹配
sed -i '' 直接更改文件内容
sed -i 's/this/that/i' log.txt // 我经常用来更改配置文件。。。
sed c 把第2到5行替换为gaga
sed '2,5c gaga' log.txt
2 that is a test
gaga