管道命令(pipe)
选取命令:cut,grep
[root@Dark ~]# export | cut -c 12-23
取出字符范围12-23的结果
grep
[root@Dark ~]# last | grep -v 'root'
grep常用方法:
1.查找特定字符串
[root@Dark ~]# cat oracle.sh | grep -n 'hostname'
[root@Dark ~]# grep -n '[^a]ss' /root/Desktop/oracle.sh
找出ss前面不带a的那一行;
[root@Dark ~]# grep -n '[^a-z]ss' /root/Desktop/oracle.sh
找出ss前面不带小写字符的行
找出含有数字的行
2.行首与行尾字符^$
[root@Dark ~]# grep -n '^the' oracle.sh
找出以the开头的行
[root@Dark ~]# grep -n '^$' oracle.sh
输出空白行
3.任意一个字符. 与重复字符 *
.(小数点):代表一定有一个任意字符的意思*(星号):代表重复前一个0到无穷多次,重复前一个
[root@Dark ~]# grep -n 'g..d' oracle.sh
输出结果中 含有 good,glad 等等
[root@Dark ~]# grep -n 'oo*' hehe.txt
输出结果含有oo,ooo,ooooo等
[root@Dark ~]# grep -n 'g.*g' hehe.txt
得到以g开头,g结尾,中间为任意字符的行
sed工具
[root@Dark ~]# sed [-nefr] [动作]参数:
-n: 使用安静模式;
-e: 直接在命令行模式上进行sed动作编辑;
-f: 直接将sed的动作写在一个文件内,-f filename则可以指向filename内的sed动作
-r: sed的动作支持是拓展型正则表达式的语法
-i: 直接修改读取的文件内容,而不是由屏幕输出
动作说明:[n1[,n2]] function
n1,n2:不见得会存在,一般代表选择进行动作的行数
function 参数:
a: 新增,a的后面可以接字符串,这些字符串会在新的一行出现
c: 替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行!
d: 删除
i: 插入,i的后面可以接字符串,
p: 打印
s:替换,可以直接进行替换的工作;可以搭配正则表达式!如: 1,20s/old/new/g
[root@Dark ~]# nl /etc/passwd | sed '2,5d'
[root@Dark ~]# cat -n /etc/passwd | sed '2,6d'1 root:x:0:0:root:/root:/bin/bash
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 news:x:9:13:news:/etc/news:
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
heheda
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
1 root:x:0:0:root:/root:/bin/bash
Heheda
6 sync:x:5:0:sync:/sbin:/bin/sync
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
eth0 Link encap:Ethernet HWaddr 00:0C:29:76:BF:50
inet addr:172.16.LOVE.130 Bcast:172.16.LOVE.255 Mask:255.255.255.0
Interrupt:83 Base address:0x2024
inet addr:127.0.0.1 Mask:255.0.0.0
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-eth0
awk:
2016 04:35:45
root :0.0
root :0.0
root Mon
root Mon
reboot boot
wtmp Fri
cat access.log | cut -d " " -f1 | sort | uniq -c | sort -k 1 -n -r | head -10
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import org.apache.commons.io.FileUtils;
public class log {
public static void main(String[] args) {
String []IP = {"192.168.51.134","192.168.0.101","192.168.0.151","192.168.14.137","192.168.15.179","125.19.22.29","174.119.232.29","124.119.22.59"};
String []time = {"21","43","67","599","24","740","230","154","78","95"};
String []request = {"GET","POST"};
String []url = {"www.baidu.com","www.xxx.com","www.douyu.tv","www.sina.com","www.wjq.com","www.panda.tv","www.zganqi.con"};
String []status = {"200","301","302","404","500"};
String []sendbyte = {"3344","2789","432004","490","98324","3158","47851","99641"};
File file = new File("E:\\accesslog.txt");
for(int i=0;i<1000000;i++)
{
String line = getOne(IP) + getOne(time) + getOne(request) + getOne(url) + getOne(status) + getOne(sendbyte);
ArrayList<String> lines = new ArrayList<String>();
lines.add(line);
try {
FileUtils.writeLines(file, lines,true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static String getOne(String[] arr)
{
int length = arr.length;
Random r = new Random();
int rand = r.nextInt(length);
return arr[rand]+" ";
}
}