根据日期字符串截取日志文件
sed 按行处理,不会将整个文件加载到内存中
要切出从2012-02-09到2012-09-10的所有数据行,(假设你的日志文件以yyyy-MM-dd的日期格式开头)只需要:
sed -n '/^2012-02-09/,/^2012-09-10/p' whole.log > part.log
查看系统64位还是32位:
getconf LONG_BIT
修改文件权限
$ chmod u+x file 给file的属主增加执行权限
$ chmod 751 file 给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
$ chmod u=rwx,g=rx,o=x file 上例的另一种形式
$ chmod =r file 为所有用户分配读权限
$ chmod 444 file 同上例
$ chmod a-wx,a+r file 同上例
$ chmod -R u+r directory 递归地给directory目录下所有文件和子目录的属主分配读的权限
$ chmod 4755 设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。
创建用户(useradd):
(1)用useradd命令创建用户创建用户:
语法: useradd [所要创建的用户名] ,回车
(2)用passwd命令为该用户创建密码:
语法: passwd [用户名] ,回车
删除用户(userdel命令)
语法:userdel [-r] [要删除的用户的名称]
例如:[root@localhost ~]userdel -r aillo
查看文件中关键字所在上下文:
1、或操作
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同样可以实现
awk '/123|abc/' filename // awk 的实现方式
2、与操作
grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行。
3、其他操作
grep -i pattern files //不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files //只列出匹配的文件名,
grep -L pattern files //列出不匹配的文件名,
grep -w pattern files //只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files //匹配的上下文分别显示[number]行,
多文件字符串替换-linux
sed [-nefri] ‘command’ 输入文本/文件
如:将当前文件夹下所有包含字符串2,'POINT'
的文本文件均替换为4,'POINT'
.
可使用命令:
sed -i s/2,\'POINT\'/4,\'POINT\'/g `grep 2,\'POINT\' -rl .`
命令解析:
1. sed ‘s/要替换的字符串/新的字符串/g’ (要替换的字符串可以用正则表达式)
2. -i∶直接修改读取的文件内容,而不是由屏幕输出
3. `grep 2,\’POINT\’ -rl .` 执行查询命令 ,查找满足条件的文件列表
重复行
方法一:uniq
- 查找非重复行(结果不包含重复行)
sort file |uniq -u
- 查找重复行
sort file |uniq -d
- 统计(结果的第一列为 该行信息重复次数,然后为行内容)
sort file | uniq -c
去除重复行
sort file |uniq
以上命令均不对源文件做改动,可通过>
命令指定输出文件
如:sort test.txt |uniq -u > uniq.txt
- 如要将 1.txt 中 所有 “相邻” 重复行合并成一行,结果存入 2.txt 使用 :
uniq 1.txt > 2.txt
- 如果是想将相邻重复行彻底删掉(而不是合并成一行),可以用
uniq -u 1.txt > 2.txt
- 如要将 1.txt 中 所有 “相邻” 重复行合并成一行,结果存入 2.txt 使用 :
方法二:Vim
先sort排序,再去重
:sort //直接排序
:g/^\(.*\)$\n\1$/d //去除重复行
:g/\%(^\1$\n\)\@<=\(.*\)$/d //功能同上
:g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d //功能同上
方法三:使用awk
awk '!a[$0]++' file
解析: awk 流程是逐行处理的,默认从文件的第一行一直处理到文件最后一行,还要知道 awk 的基本命令格式是pattern{action}
先匹配各种各样的模式,然后大括号里处理如何打印输出,默认的只要匹配了pattern
就{print $0}
,如果pattern
未命中其判断值为假(0)那么就不会再去处理{action}
了;
举个最简单的例子:awk ‘1’ file和awk ‘{print $0}’ file是一个道理,都是从头到尾依次打印文件的每一行。
a[$0]
这个非常好理解,建立数组a,其变量是文本中的每一行,awk里$1
是第一列,$2
是第二列,以此类推$NF
是最后一列,而$0
是代表所有列及分隔符,也就是一整行,这样如果pattern是真的那就打印一整行 ++的意思是 a 数组取变量完毕后,对该数组值 +1。
找个最简单的文档来解释一下:
cat file
1 xxx
2 yyy
3 zzz
4 xxx
5 yyy
6 zzz
7 xxx
8 yyy
9 zzz
则执行命令:
awk '!a[$0]++{print NR,$0}' file
1 xxx
2 yyy
3 zzz
awk 'a[$0]++{print NR,$0}' file
4 xxx
5 yyy
6 zzz
7 xxx
8 yyy
9 zzz
其中 NR
表示行号。
删除包含text
这个字符串的行 -vim
:g/text/d
统计文件行数 -linux
wc filename
- c
统计字节数。
- l
统计行数。
- w
统计字数。
列块对应行粘贴 -vim
例如原有数据如下:
Names
Donald Knuth
Sebastian Thrun
Peter Norvig
Satoshi Nakamoto
Age
100
50
60
45
期望结果为:
Names | Age |
---|---|
Donald Knuth | 100 |
Sebastian Thrun | 50 |
Peter Norvig | 60 |
Satoshi Nakamoto | 45 |
可以理解为将第二列粘贴到第一列后:
Yank it in visual mode: //在 visual 模式拷贝
- Move cursor to the beginning of Age //将光标移至 Age 的首字母
- Press
Ctrl + v
to enter visual mode //进入VISUAL BLOCK 模式 - Move cursor to 5 in 45 //光标移至下数第五行
- Press
y
to yank (ord
to delete) //按 y 拷贝或 d 删除 - You have now yanked in visual mode.
Paste (in normal mode) //在 normal 模式粘贴
- Move to the end of the first line and add more spaces because it’s shorter than the second line for example. If you paste a “block” without adding extra spaces, it will overwrite the “run” in Sebastian Thrun. //光标移至首行,并在行尾添加空格使之与下面对齐。
- Now you’re on the first line, insert a few spaces after the last character. Make sure you’re not in insert mode and hit
p
to paste the block. (If you want to paste in insert mode, use ctrl+r “)//按 p 粘贴即可。
没看懂^_^,没关系,上图:
vim 与系统剪切板的互动
"+y
复制当前行到系统剪切板
"+p
粘贴系统剪切板内容到当前位置后
/**************************************************/
参考文章
Linux常用文本操作命令整理
查看linux系统信息
一、查看Linux内核版本命令(两种方法):
1、cat /proc/version
[root@localhost ~]# cat /proc/version
Linux version 2.6.18-194.8.1.el5.centos.plus (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Wed Jul 7 11:50:45 EDT 2010
2、uname -a
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.8.1.el5.centos.plus #1 SMP Wed Jul 7 11:50:45 EDT 2010 i686 i686 i386 GNU/Linux
二、查看Linux系统版本的命令(3种方法):
1、lsb_release -a,即可列出所有版本信息:
[root@localhost ~]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description: CentOS release 5.5 (Final)
Release: 5.5
Codename: Final
这个命令适用于所有的Linux发行版,包括Redhat、SuSE、Debian…等发行版。
2、cat /etc/redhat-release,这种方法只适合Redhat系的Linux:
[root@localhost ~]# cat /etc/redhat-release
CentOS release 5.5 (Final)
3、cat /etc/issue,此命令也适用于所有的Linux发行版。
[root@localhost ~]# cat /etc/issue
CentOS release 5.5 (Final)
Kernel \r on an \m