鸟哥私房菜—总结文本命令篇

第四版的鸟哥私房菜 部分命令总结

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注