linux 常用命令
date 日期
cal 日历信息
相对路径
绝对路径 .代表此层目录 ..代表上层目录 ~代表自己的主目录 也就是root目录
ls -a 显示所有的文件
who 查看当前登录系统所有用户名
who am l 命令 显示当前登录的用户名
ps 查看当前登录会话的所有活动进程
exit 种植linux会话
要暂时获得root 权限 su
passwd 修改当前用户的密码
vi 编辑器的使用
G 移动光标到最后一行
dd 删除行
/word 在当前光标之后找名为word的字符串
?word 在当前光标之前找名为word的字符串
:1,$s/word1/word2/gc 在第1和最后1行之间查找字符串word1,并将word1 换成word2
,并提示用户
shell 在多用户环境中,shell将用户界面与内核分开,shell可以解释各种内核命令并充当用户与内核之间的接口
history 刚才执行过的命令
sed -i 's/\t/,/g' data.csv
直接改变文件的内容
Linux sed命令是利用script来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
sed -e 4a\newLine testfile
1、以行为单位的新增/删除
nl test.sh | sed '2,5d' //delete
nl test.sh |sed '2a drink tea' //add
2、以行为单位的替换与显示
nl test.sh| sed '2,5c No 2-5 number'
仅列出 test.sh 文件内的第 5-7 行 linux 中相反的用-n
nl test.sh | sed -n '5,7p'
3、搜索 test.sh 有root关键字的行
如果root找到,除了输出所有行,还会输出匹配行。
使用-n的时候将只打印包含模板的行。
nl test.sh |sed -n '/root/p'
4、数据的搜寻并删除
删除/etc/passwd所有包含root的行,其他行输出
nl test.sh |sed '/root/d'
5、数据的搜寻并执行命令
搜索/etc/passwd,找到bash对应的行,执行后面花括号中的一组命令,每个命令之间用分号分
隔,这里把bash替换为blueshell,再输出这行:最后的q是退出。
nl test.sh |sed -n '/bash/{s/bash/blueshell/;p;q}'
6、数据的搜寻并替换
除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed
的搜寻与替代的与 vi 相当的类似!他有点像这样:
sed 's/要被取代的字串/新的字串/g'
先观察原始信息,利用 /sbin/ifconfig 查询 IP
[root@www ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.106.226 netmask 255.255.240.0 broadcast 172.17.111.255
ether 00:16:3e:08:0d:a2 txqueuelen 1000 (Ethernet)
RX packets 561421 bytes 124222759 (118.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19735524 bytes 10016908122 (9.3 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
将 IP 前面的部分予以删除
[root@www ~]# ifconfig |grep 'inet 172'|sed 's/^.*inet //g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
接下来则是删除后续的部分,亦即: netmask 255.255.240.0 broadcast 172.17.111.255
将 IP 后面的部分予以删除
[root@www ~]# ifconfig |grep 'inet 172'|sed 's/^.*inet //g'|sed 's/netmask.*$//g'
awk
基本用法
log.txt文本内容如下:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
用法一:
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
实例:
# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
# 格式化输出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt 8s代表一个宽度8个字符(-表示左对齐
,没有则表示右对齐)
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
用法三:
awk -v # 设置变量
实例:
$ awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
先运行$1的值后 再把值和后面的变量做运算
用法四
过滤第一列大于2的行
$ awk '$1>2' log.txt #命令
#输出
3 Are you like awk
This's a test
10 There are orange,apple,mongo
过滤第一列等于2的行
$ awk '$1==2 {print $1,$3}' log.txt #命令
#输出
2 is
过滤第一列大于2并且第二列等于'Are'的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt #命令
#输出
3 Are you
使用正则,字符串匹配
# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt
---------------------------------------------
this a
~ 表示模式开始。// 中是模式。
# 输出包含"re" 的行
$ awk '/re/ ' log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo
忽略大小写
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt
---------------------------------------------
2 this is a test
This's a test
awk 'BEGIN{IGNORECASE=1} /this/' log.txt