0. grep命令
2. Linux 中ls -l // ll 命令详解 (7个字段):文件属性 1
4. Linux中 >和>>的区别 []和[[]]的区别 3
5. sed的使用参数 (shell的用途)
8. wc – 命令
9. ifconfig命令
10. awk 命令
0.grep命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。 grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
grep [option] pattern file
用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。
-a –text #不要忽略二进制的数据。 -A<显示行数> –after-context=<显示行数> #除了显示符合范本样式的那一列之外,并显示该行之后的内容。 -b –byte-offset #在显示符合样式的那一行之前,标示出该行第一个字符的编号。 -B<显示行数> –before-context=<显示行数> #除了显示符合样式的那一行之外,并显示该行之前的内容。 -c –count #计算符合样式的列数。 -C<显示行数> –context=<显示行数>或-<显示行数> #除了显示符合样式的那一行之外,并显示该行之前后的内容。 -d <动作> –directories=<动作> #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。 -e<范本样式> –regexp=<范本样式> #指定字符串做为查找文件内容的样式。 -E –extended-regexp #将样式为延伸的普通表示法来使用。 -f<规则文件> –file=<规则文件> #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。 -F –fixed-regexp #将样式视为固定字符串的列表。 -G –basic-regexp #将样式视为普通的表示法来使用。 -h –no-filename #在显示符合样式的那一行之前,不标示该行所属的文件名称。 -H –with-filename #在显示符合样式的那一行之前,表示该行所属的文件名称。 -i –ignore-case #忽略字符大小写的差别。 -l –file-with-matches #列出文件内容符合指定的样式的文件名称。 -L –files-without-match #列出文件内容不符合指定的样式的文件名称。 -n –line-number #在显示符合样式的那一行之前,标示出该行的列数编号。 -q –quiet或–silent #不显示任何信息。 -r –recursive #此参数的效果和指定“-d recurse”参数相同。 -s –no-messages #不显示错误信息。 -v –revert-match #显示不包含匹配文本的所有行。 -V –version #显示版本信息。 -w –word-regexp #只显示全字符合的列。 -x –line-regexp #只显示全列符合的列。 -y #此参数的效果和指定“-i”参数相同。
grep的规则表达式: ^ #锚定行的开始 如:’^grep’匹配所有以grep开头的行。 $ #锚定行的结束 如:’grep$’匹配所有以grep结尾的行。 . #匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。 * #匹配零个或多个先前字符 如:’*grep’匹配所有一个或多个空格后紧跟grep的行。 .* #一起用代表任意字符。 [] #匹配一个指定范围内的字符,如'[Gg]rep’匹配Grep和grep。 [^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep’匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 \(..\) #标记匹配字符,如’\(love\)’,love被标记为1。 \< #锚定单词的开始,如:’\<grep’匹配包含以grep开头的单词的行。 \> #锚定单词的结束,如’grep\>’匹配包含以grep结尾的单词的行。 x\{m\} #重复字符x,m次,如:’0\{5\}’匹配包含5个o的行。 x\{m,\} #重复字符x,至少m次,如:’o\{5,\}’匹配至少有5个o的行。 x\{m,n\} #重复字符x,至少m次,不多于n次,如:’o\{5,10\}’匹配5–10个o的行。 \w #匹配文字和数字字符,也就是[A-Za-z0-9],如:’G\w*p’匹配以G后跟零个或多个文字或数字字符,然后是p。 \W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b #单词锁定符,如: ‘\bgrep\b’只匹配grep。 POSIX字符: 为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。 [:alnum:] #文字数字字符 [:alpha:] #文字字符 [:digit:] #数字字符 [:graph:] #非空字符(非空格、控制字符) [:lower:] #小写字符 [:cntrl:] #控制字符 [:print:] #非空字符(包括空格) [:punct:] #标点符号 [:space:] #所有空白字符(新行,空格,制表符) [:upper:] #大写字符 [:xdigit:] #十六进制数字(0-9,a-f,A-F)
实例1:查找指定进程 命令: ps -ef|grep svn 输出: [root@localhost ~]# ps -ef|grep svn root 4943 1 0 Dec05 ? 00:00:00 svnserve -d -r /opt/svndata/grape/ root 16867 16838 0 19:53 pts/0 00:00:00 grep svn [root@localhost ~]# 说明: 第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。 实例2:查找指定进程个数 命令: ps -ef|grep svn -c ps -ef|grep -c svn 输出: [root@localhost ~]# ps -ef|grep svn -c 2 [root@localhost ~]# ps -ef|grep -c svn 2 [root@localhost ~]# 说明: 实例3:从文件中读取关键词进行搜索 命令: cat test.txt | grep -f test2.txt 输出: [root@localhost test]# cat test.txt hnlinux peida.cnblogs.com ubuntu ubuntu linux redhat Redhat linuxmint [root@localhost test]# cat test2.txt linux Redhat [root@localhost test]# cat test.txt | grep -f test2.txt hnlinux ubuntu linux Redhat linuxmint [root@localhost test]# 说明: 输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行 实例3:从文件中读取关键词进行搜索 且显示行号 命令: cat test.txt | grep -nf test2.txt 输出: [root@localhost test]# cat test.txt hnlinux peida.cnblogs.com ubuntu ubuntu linux redhat Redhat linuxmint [root@localhost test]# cat test2.txt linux Redhat [root@localhost test]# cat test.txt | grep -nf test2.txt 1:hnlinux 4:ubuntu linux 6:Redhat 7:linuxmint [root@localhost test]# 说明: 输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号 实例5:从文件中查找关键词 命令: grep ‘linux’ test.txt 输出: [root@localhost test]# grep ‘linux’ test.txt hnlinux ubuntu linux linuxmint [root@localhost test]# grep -n ‘linux’ test.txt 1:hnlinux 4:ubuntu linux 7:linuxmint [root@localhost test]# 说明: 实例6:从多个文件中查找关键词 命令: grep ‘linux’ test.txt test2.txt 输出: [root@localhost test]# grep -n ‘linux’ test.txt test2.txt test.txt:1:hnlinux test.txt:4:ubuntu linux test.txt:7:linuxmint test2.txt:1:linux [root@localhost test]# grep ‘linux’ test.txt test2.txt test.txt:hnlinux test.txt:ubuntu linux test.txt:linuxmint test2.txt:linux [root@localhost test]# 说明: 多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上”:”作为标示符 实例7:grep不显示本身进程 命令: ps aux|grep \[s]sh ps aux | grep ssh | grep -v “grep” 输出: [root@localhost test]# ps aux|grep ssh root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: root@pts/0 root 16901 0.0 0.0 61180 764 pts/0 S+ 20:31 0:00 grep ssh [root@localhost test]# ps aux|grep \[s]sh] [root@localhost test]# ps aux|grep \[s]sh root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: root@pts/0 [root@localhost test]# ps aux | grep ssh | grep -v “grep” root 2720 0.0 0.0 62656 1212 ? Ss Nov02 0:00 /usr/sbin/sshd root 16834 0.0 0.0 88088 3288 ? Ss 19:53 0:00 sshd: root@pts/0 说明: 实例8:找出已u开头的行内容 命令: cat test.txt |grep ^u 输出: [root@localhost test]# cat test.txt |grep ^u ubuntu ubuntu linux [root@localhost test]# 说明: 实例9:输出非u开头的行内容 命令: cat test.txt |grep ^[^u] 输出: [root@localhost test]# cat test.txt |grep ^[^u] hnlinux peida.cnblogs.com redhat Redhat linuxmint [root@localhost test]# 说明: 实例10:输出以hat结尾的行内容 命令: cat test.txt |grep hat$ 输出: [root@localhost test]# cat test.txt |grep hat$ redhat Redhat [root@localhost test]# 说明: 实例11:输出ip地址 命令: ifconfig eth0|grep -E “([0-9]{1,3}\.){3}[0-9]” 输出: [root@localhost test]# ifconfig eth0|grep “[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}” inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0 [root@localhost test]# ifconfig eth0|grep -E “([0-9]{1,3}\.){3}[0-9]” inet addr:192.168.120.204 Bcast:192.168.120.255 Mask:255.255.255.0 [root@localhost test]# 说明: 实例12:显示包含ed或者at字符的内容行 命令: cat test.txt |grep -E “ed|at” 输出: [root@localhost test]# cat test.txt |grep -E “peida|com” peida.cnblogs.com [root@localhost test]# cat test.txt |grep -E “ed|at” redhat Redhat [root@localhost test]# 说明: 实例13:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行 命令: grep ‘[a-z]\{7\}’ *.txt 输出: [root@localhost test]# grep ‘[a-z]\{7\}’ *.txt test.txt:hnlinux test.txt:peida.cnblogs.com test.txt:linuxmint [root@localhost test]#
实例14:日志文件过大,不好查看,我们要从中查看自己想要的内容,或者得到同一类数据,比如说没有404日志信息的 命令: grep ‘.’ access1.log|grep -Ev ‘404’ > access2.log grep ‘.’ access1.log|grep -Ev ‘(404|/photo/|/css/)’ > access2.log grep ‘.’ access1.log|grep -E ‘404’ > access2.log 输出: [root@localhost test]# grep “.”access1.log|grep -Ev “404” > access2.log 说明:上面3句命令前面两句是在当前目录下对access1.log文件进行查找,找到那些不包含404的行,把它们放到access2.log中,后面去掉’v’,即是把有404的行放入access2.log |
---|
1.Linux ls -ld
ls 列出文件以及目录
-l 以详细的格式列表
-d 仅列目录
只是查看当前目录的详细信息,只是目录,不包括目录下的子目录和文件。
ls -ld 目录名/文件名
只是查看此目录/文件的详细信息,只是目录,不包括目录下的子目录和文件。
ls -ld 目录名/文件名 | awk ‘{print int($5)}’
2. Linux
中
ls -l // ll
命令详解
(7
个字段
):
文件属性
http://blog.csdn.net/sjzs5590/article/details/8254527
–
rw-r–r–
1
root
root 116 Feb 8 13:47 ZhiZhen.c
“-”表示普通文件 touch
“d”表示目录 mkdir
“l”表示链接
“b“表示块设备文件(block)
“c”表示字符设备文件(character)
“p”表示文件为命令管道文件
“s”为socket文件
前三个
rwx
表示:*文件拥有者权限
中间三个表示:$所属组拥有者权限
最后三个表示:#其他用户用于的权限
如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数
所有人添加s权限,用户lee使用/bin/touch创建file所有人为root
文件
/目录的拥有者
文件/目录拥有者所在的组
文件所占用的的空间(以字节为单位)
文件/目录最近访问/修改的时间
文件名
3.shell
中的
if
判断
shell中的if与c语言if上的区别
|
|
|
|
|
|
|
|
|
|
|
|
-s file 文件大小非0时为真
[ -f “somefile” ] :判断是否是一个文件
[ -x “/
bin
/ls” ] :判断/
bin
/ls是否存在并有可执行权限
[ -n “$var” ] :判断$var变量是否有值
[ “$a” = “$b” ] :判断$a和$b是否相等
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
if [ -s “audit” ];then
…………one…………
if [ ! -s audit.bak ];then
…………two…………
else
…………three…………
fi
…………four…………
fi
…………five…………
‘
shell中的
if…fi 语句
的基本控制语句,它允许Shell有条件作出决定并执行语句。
语法
if
[
expression
]
then
Statement
(
s
)
to be executed
if
expression
is
true
fi
Shell expression求值。如果结果值是true,给定statement被执行。如果 expression 为false ,则没有语句将不会被执行。大部分的时候,会使用比较操作符决策。
关注对括号和表达之间的空间。这个空间是强制性的,否则语法错误。
如果expression 是一个shell命令,那么它会被假定如此,如果它执行后返回0。如果它是一个布尔表达式,那么返回true。
例子:
#!/bin/sh
a
=
10
b
=
20
if
[
$a
==
$b
]
then
echo
“a is equal to b”
fi
if
[
$a
!=
$b
]
then
echo
“a is not equal to b”
fi
这将产生以下结果:
a
is
not
equal to b
shell判断文件有多少行
https://zhidao.baidu.com/question/922495731716454579.html
# awk ‘{print NR}’ a.txt | tail -n1
1、^代表行首
2、$代表行尾
3、所有行首增加sed -i ‘s/^/ABC/’ a.txt
4、所有行尾添加sed -i ‘s/$/XYZ/’ a.txt
5、删除首行sed -i ‘1d’ d.txt
6、删除末行sed -i ‘$d’ d.txt
7、第5行添加sed -i ‘5 r 5.txt’ a.txt
8、shell判断文件有多少行
https://zhidao.baidu.com/question/922495731716454579.html
# awk ‘{print NR}’ a.txt | tail -n1
9、剔除空格sed -i ‘s/[ ]*//g’ ~/vip1.txt
10、删除回车符sed -i ‘s/^M//g’ a.txt
11、从fromstart这行下面添加内容sed -i ‘/fromstart/r 4.txt’ 5.txt
12、第一列排序存文件awk ‘{print $1}’ vip1.txt |sort -n > vip2.txt //把 vip1.txt文件中的内容排序按照第一列排序 覆盖给 vip2.txt
13、取出文件中的某一列 # awk ‘{print $1}’ aa.txt
14、shell删除文件中的所有空行
# sed -i ‘/^$/d’ a.txt
shell截取字符串的方法
http://www.cnblogs.com/xwdreamer/p/3823463.html
4.Linux
中
>
和
>>
的区别
[]
和
[[]]
的区别
>(重定向到一个地方)直接把内容生成到指定文件,会覆盖员文件中的内容,还有一种用途是直接生成一个空白文件,相当于touch命令
>>(追加到一个地方)尾部追加,不会覆盖掉文件中原有的内容
双括号中的表达式可以看作是一个单的的语句,并返回其退出状态码:
而逻辑与(and)和逻辑或(or)在 [ 和 [[ 中的用法也不同:
[ 中使用 -a 和 -o 参数连接不同的条件,[[ 中使用 && 和 ||。
5. sed
的使用参数
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html
http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html
常用选项:
-n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑
-f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作
-r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i∶直接修改读取的文件内容,而不是由屏幕输出
常用命令:
a ∶ 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c ∶ 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d ∶ 删除,因为是删除,所以 d 后面通常不接任何内容
i ∶ 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p∶ 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用
s∶ 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g
特殊字符意义:
、使用句点匹配单字符
句点“.”可以匹配任意单字符。“.”可以匹配字符串头,也可以是中间任意字符。假定正在过滤一个文本文件,对于一个有1 0个字符的脚本集,要求前4个字符之后为X C,匹配操作如下:. . . .X C. . . .
在行首以^匹配字符串或字符序列
^只允许在一行的开始匹配字符或单词。在行首第4个字符为1,匹配操作表示为:^ . . . 1
在行尾以$匹配字符串或字符
可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。如果在行尾匹配单词j e t 0 1,操作如下:j e t 0 1 $ 如果只返回包含一个字符的行,操作如下:^ . $
使用*匹配字符串中的单字符或其重复序列
使用此特殊字符匹配任意字符或字符串的重复多次表达式。
使用/屏蔽一个特殊字符的含义
有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。如果要在正则表达式中匹配以* . p a s结尾的所有文件,可做如下操作:/ * / . p a s
使用[]匹配一个范围或集合
使用[ ]匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开,但并不强制要求这样做(一些系统提倡在复杂的表达式中使用逗号),这样做可以增 加模式的可读性。使用“ -”表示一个字符串范围,表明字符串范围从“ -”左边字符开始,到“ -”右边字符结束。假定要匹配任意一个数字,可以使用:[ 0 1 2 3 4 5 6 7 8 9 ] 要匹配任意字母,则使用:[ A – Z a – z ]表明从A – Z、a – z的字母范围。
使用/{/}匹配模式结果出现的次数
使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用/ { / },此模式有三种形式,即:
pattern/{n/} 匹配模式出现n次。
pattern/{n,/} 匹配模式出现最少n次。
pattern/{n,m} 匹配模式出现n到m次之间,n , m为0 – 2 5 5中任意整数。
匹配字母A出现两次,并以B结尾,操作如下:A / { 2 / } B匹配值为A A B 匹配A至少4次,使用:A / { 4 , / } B
sed的工作方式:
实用工具按顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端。完成了这一行 上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。
如同前面所提到的,默认输出是将每一行的内容输出到屏幕上。在这里,开始涉及到 两个重要的因素—首先,输出可以被重定向到另一文件中,以保存变化;第二,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。不过,可以按需要将操作限制在指定的行上。
实用工具:
sed [options] ‘{command}’ [filename]
1
》
shell
将一个值替换为另一个值:
‘s/{old value}/{new value}/’
例如:
(全局修改)
将tiger改为worf after改为before
$ echo The tiger cubs will meet on Tuesday after school |sed -e ‘s/tiger/wolf/’ -e ‘s/after/before/’
$ echo The tiger cubs will meet on Tuesday after school | sed ‘s/tiger/wolf/;s/after/before/’
$ echo The tiger cubs will meet on Tuesday after school | sed
‘
> s/tiger/wolf/
> s/after/before/
‘
sed -i “s/after/before/”
文件名
例如:
(局部修改)
$ cat sample_one
one 1
two 1
three 1
one 1
two 1
two 1
three 1
$
假定希望用 “2” 来替换 “1”,但仅在单词 “two” 之后才作替换,而不是每一行的所有位置。通过指定在给出替换命令之前必须存在一次匹配,可以实现这一点:
$ sed ‘/two/s/1/2/’ sample_one
one 1
two 2
three 1
one 1
two 2
two 2
three 1
$
2
》
shell
删除第一行、最后一行或者增加删除某行
{^表示开始 $表示结束 }
删除某行
[root@localhost ruby]
# sed ‘1d’ ab
#删除第一行
[root@localhost ruby]
# sed ‘$d’ ab
#删除最后一行
[root@localhost ruby]
# sed ‘1,2d’ ab
#删除第一行到第二行
[root@localhost ruby]
# sed ‘2,$d’ ab
#删除第二行到最后一行
sed -i ‘/^QWQ/d’ <file>
删除文件中包含某个关键字
开头
的所有行
sed -i ‘/QWQ/d’ <file>
删除文件中包含某个关键字的所有行
sed -i ‘/ntpdate/s/^#//’ /etc/crontab
删除文中ntpdete所在行 开头#给删除
inet addr:
192.168
.
1.100
Bcast:
192.168
.
1.255
Mask:
255.255
.
255.0
将 IP 前面的部分予以删除
[root@www ~]# /sbin/
ifconfig
eth0 |
grep
‘inet addr’
|
sed
‘s/^.*addr://g’
192.168
.
1.100
Bcast:
192.168
.
1.255
Mask:
255.255
.
255.0
接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
将 IP 后面的部分予以删除
[root@www ~]# /sbin/
ifconfig
eth0 |
grep
‘inet addr’
|
sed
‘s/^.*addr://g’
|
sed
‘s/Bcast.*$//g’
192.168
.
1.100
显示某行
. [root@localhost ruby]
# sed -n ‘1p’ ab
#显示第一行
[root@localhost ruby]
# sed -n ‘$p’ ab
#显示最后一行
[root@localhost ruby]
# sed -n ‘1,2p’ ab
#显示第一行到第二行
[root@localhost ruby]
# sed -n ‘2,$p’ ab
#显示第二行到最后一行
使用模式进行查询
[root@localhost ruby]
# sed -n ‘/ruby/p’ ab
#查询包括关键字ruby所在所有行
[root@localhost ruby]
# sed -n ‘/\$/p’ ab
#查询包括关键字$所在所有行,使用反斜线\屏蔽特
增加一行或多行字符串
[root@localhost ruby]# cat ab
Hello!
ruby is me,welcome to my blog.
end
[root@localhost ruby]
# sed ‘1a drink tea’ ab
#第一行后增加字符串”drink tea”
Hello!
drink tea
ruby is me,welcome to my blog.
end
[root@localhost ruby]
# sed ‘1,3a drink tea’ ab
#第一行到第三行后增加字符串”drink tea”
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea
[root@localhost ruby]
# sed ‘1a drink tea
\n
or coffee’ ab
#第一行后增加多行,使用换行符\n
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end
[root@localhost ruby]
# awk ‘{print}{print “ccc”}’ ab
#在文档中的每一行后边都加一行相同的数据
Hello!
ccc
ruby is me,welcome to my blog.
ccc
end
ccc
代替一行或多行
[root@localhost ruby]
# sed ‘1c Hi’ ab
#第一行代替为Hi
Hi
ruby is me,welcome to my blog.
end
[root@localhost ruby]
# sed ‘1,2c Hi’ ab
#第一行到第二行代替为Hi
Hi
end
替换一行中的某部分
格式:sed
‘s/
要替换的字符串
/
新的字符串
/g
‘ (要替换的字符串可以用正则表达式)
[root@localhost ruby]
# sed -n ‘/ruby/p’ ab | sed ‘s/ruby/bird/g’
#替换ruby为bird
[root@localhost ruby]
# sed -n ‘/ruby/p’ ab | sed ‘s/ruby//g’
#删除ruby
插入
[root@localhost ruby]
# sed -i ‘$a bye’ ab
#在文件ab中最后一行直接输入”bye”
[root@localhost ruby]# cat ab
Hello!
ruby is me,welcome to my blog.
end
bye
[root@localhost ruby]
# sed -i ‘1i\enen’ ab
#在文件ab中最后一行直接输入”bye”
[root@localhost ruby]# cat ab
enen
Hello!
ruby is me,welcome to my blog.
end
3
》
shell
中的空格/空行
<1>、查看某文件时
忽略空格
(但是源文件中的空格还在,只是说在终端打印出来的文件是没有的)
^ : 开始
$ :结尾
^$ :表示空行
<2>、shell echo打印
换行
的方法
# echo -e “nihao \n jie” (注意\n前后要有空格)
<3>、shell删除文件中的所有空行
# sed -i ‘/^$/d’ a.txt
<4>、查看的时候在每一行的后边都打印一行空格
# awk ‘{print}{print “\n”}’ a.txt
4》she
ll
判断文件是否存在
5》shell判断文件夹是否存在
5》she
ll
文件的追加
文件a.txt 中的内容
aaaa
AAAA
文件b.txt中的内容
bbbb
BBBB
把a.txt中的文件追加到b.txt的文件开始
aaaa
AAAA
bbbb
BBBB
<1>、if[ !-f “c.txt” ];then //循环
touch c.txt
else
cat b.txt > c.txt
cat a.txt > b.txt
sed -i ‘$d’ b.txt //去掉b.txt的最后一行
cat c.txt >> b.txt
rm -rf c.txt
fi
<2>、cat a.txt b.txt > c.txt //会直接把a.txt的全部内容 直接复制到b.txt的前面
cat c.txt > b.txt //用c.txt的内容直接覆盖掉b.txt的内容
6.bg
或者
fg
1》当你编辑一个文件时候:# vi xiaoming.c
2》但是不小心按了ctrl+z 退出来了
3》输入 #bg
4》输入 # fg %1
其就会自动执行 编辑功能 vi
7.ipset命令
https://wenku.baidu.com/view/13bcdf2953ea551810a6f524ccbff121dd36c59b.html
https://wenku.baidu.com/view/c55ab62a14791711cc791781.html
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1>
1.1>
1.2>
8、 linux wc命令详解
wc -c filename:显示一个文件的字节数
wc -m filename:显示一个文件的字符数
wc -l filename:显示一个文件的行数
wc -L filename:显示一个文件中的最长行的长度
wc -w filename:显示一个文件的字数
本文转自凌众科技技术文章中心 http://www.lingzhong.cn ,转载请注明出处。
Linux wc命令详解
http://www.lingzhong.cn/tech/20572.htm
9、ifconfig命令
添加网卡: ifconfig eth0:1 192.168.10.25 netmask 255.255.255.0
/*注意需要在root权限下 才可以执行 用su切换*/
删除网卡: ifconfig eth0:1 192.168.10.25 netmask 255.255.255.0 down
/*这个是用命令删除 */
ifconfig eth0:1 down
/*这个是用别名 直接删除 网卡*/
取所有的eth开头的网卡: ifconfig -a | grep eth
/*
eth0 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b
eth0:1 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b
*/
根据别名,取一个网卡的所有的信息: ifconfig eth0:1
/*
eth0:1 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b
inet addr:192.168.10.25 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:19 Base address:0x2000
*/
取某一个网卡的ip部分: ifconfig eth0:1 | grep inet | awk ‘{print $2}’
/*
addr:192.168.10.25
*/
直接取到eth0:1网卡的ip地址: ifconfig eth0:1 | grep inet | awk ‘{print $2}’ | awk -F: ‘{print $2}’
/*
192.168.10.25
*/
直接取到eth0:1网卡的网关: ifconfig eth0:1 | grep inet | awk ‘{print $3}’ | awk -F: ‘{print $2}’
/*
192.168.10.255
*/
把命令写到文件中,再从文件中读出来:
char cmd_net_buf[512] = {‘\0’};
snprintf(cmd_net_buf,sizeof(cmd_net_buf),”ifconfig -a | grep eth | awk ‘{print $1}’ “)
printf(“%s\n”,cmd_net_buf);
system(cmd_net_buf);
/* 结果
eth0
eth0:1
*/
char result_buf[512] = {‘\0’};
FILE *fp = NULL;
while(fgets(result_net,sizeof(result_net),fp)!=NULL) //此时获得eth0 但其最后有一个回车符
{
if(reult_net[strlen(reult_net)-1] == ‘\n’) //删除fgets函数取到的字符串 尾部的换行符号‘\n’
reult_net[strlen(reult_net)-1] == ‘\0’;
if(0 == strcmp(result_net,net)) //net 是前端传过来的值或者是从文件中读取出来的
{ }
}
10、awk命令
1》awk中使用substr命令 截取字符串
在ntp时间同步时候,需要查看/etc/crontab文件
功能:
设置周期性被执行的指令
格式:
minute(分钟)hour(小时) day(天)mounth (月) dayfweek(星期) program
注意:
星号(*)可以用来代表所有有效的值。
井号(#)的行是注释,不会被处理。
整数间的短线(-)指定一个整数范围。例如:1-3 表示1,2,3
逗号(,)隔开的一系列值指定一个列表。例如:
3, 4, 6, 8
标明这四个指定的整数
正斜线(/)可以用来指定间隔频率。
/<
integer
>
意味着在范围内可以跳过 integer。
例如:
0-59/2
分钟字段中定义每两分钟。
*/3
的值可以用在月份字段中表示每三个月运行一次任务。
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don’t have to run the `crontab’
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/1 * * * * root /usr/sbin/ntpdate 1.1.1.1 //自己加的
# m h dom mon dow user command
17 * * * * root cd / && run-parts –report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.monthly )
#
Ubuntu调用run-parts命令,定时运行四个目录下的所有脚本。
/etc/cron.hourly下的脚本会被每小时运行一次,在每小时的17分时运行。
/etc/cron.daily下的脚本会被每天运行一次,在每天6点25分运行。
/etc/cron.weekly下的脚本会被每周运行一次,在每周第7天的6点47分运行。
/etc/cron.monthly下的脚本会被每月运行一次,在每月1号的6点52分运行。
以上是文件的内容。
substr(字符串,开始,截取多少个)
# cat /etc/crontab | grep ntpdate | awk ‘{print substr($1, 1,1)}’
*
# cat /etc/crontab | grep ntpdate | awk ‘{print substr($1, 2,1)}’
/
# cat /etc/crontab | grep ntpdate | awk ‘{print substr($1, 3,1)}’
1
修改值:
# sed -i ‘/ntpdate/s/[0-9]\+/9/’ /etc/crontab ==》》把1改成9
# sed -i ‘/ntpdate/s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/2.2.2.2/’ /etc/crontab ==》》把1.1.1.1改2.2.2.2
# sed -i ‘/ntpdate/s/^/#/’ /etc/crontab ==》》把*/1 前面加# */1==>>#*/1
# sed -i ‘/ntpdate/s/^#//’ /etc/crontab ==》》把#*/1前面的#删除 # */1==>>*/ 1
2》awk中使用split命令 截取字符串
在awk1.c文件中,有如下所示的内容。
-rwxr-xr-x 1 root root 13304 May(“17″,”a.out”);
-rw-r–r– 1 root root 0 May(“23″,”awk.c”);
-rw-r–r– 1 root root 12 May(“55″,”demo.txt”);
-rw-r–r– 1 root root 420 May(“54″,”readDemoTxt_fgetc.c”);
需要得到,其中的一些字符
a.out 17
awk.c 23
demo.txt 55
readDemoTxt_fget.c 54
readDemoTxt_fget.c 45
实现的命令如下(解释的时候以一行为例):
[root@node-2 dd]# cat awk1.c | sed ‘s/”//g’ | awk ‘{print($6)}’ | awk ‘{split($0,a,”(“);print a[2]}’ | awk ‘{split($0,b,”)”);print b[1]}’ | awk ‘{split($0,c,”,”);print c[2],c[1]}’
1》对于
cat awk1.c
,
不做过多的解释;
显示为: -rwxr-xr-x 1 root root 13304 May(“17″,”a.out”);
2》对于
sed ‘s/”//g’
,意思是去掉文件中所有的双引号;
显示为: -rwxr-xr-x 1 root root 13304 May(17,a.out);
3》对于
awk ‘{print($6)}’
,是取出第6列;
显示为:May(17,a.out);
4》对于
awk ‘{split($0,a,”(“);print a[2]}’
,是以’( ‘为分割点,对字符串进行截取,打印出( 后面的;
显示为:17,a.out);
5》对于
awk ‘{split($0,b,”)”);print b[1]}’
,是以’ )’为分割点,对字符串进行截取,打印出 )前面的;
显示为:17,a.out
6》对于
awk ‘{split($0,c,”,”);print c[2],c[1]}’
,是以 ‘ ,’ 为分割点,对字符串进行截取,先打印出c[2],后打印c[1];
显示为:a.out 17
3》awk中使用split命令 截取字符串
字符串 VALUES(‘109′,’x11′,”,”,’yes’,’0′); 最后显示为 x11 109
[root@localhost l7-protocols]# sed “s/’//g” resource_app.conf | awk ‘{print($4)}’ | awk ‘{split($0,a,”(“);print a[2],a[1]}’ | awk ‘{split($0,b,”,”);print b[2],b[1]}’
4》awk修改文件中的
某一列
asdfgh
popen.txt
《–【 文件该之前】
asdfgh
popen
qwerty
popen.c
【文件该之后】–》
qwerty
popen
如果只是改变显示的值:
#awk ‘{print $1,”popen”}’ popen.txt
如果要改文件中的值:
#awk ‘{print $1,\”popen\”}’ popen.txt > temp_1 && mv -f temp_1 popen.txt
//[[ popen引号需要转义]] [[mv时候加-f取消 提示输入y/n]] //[[并且要加cat命令 否则后需的fgets没有值]]
5》awk修改文件中的
第一行第一列设为1;第二行第二列设为2;……以此类推
a
b c
《–【 文件该之前】
1
b c
d
e
f d
2
f
g h
i
【文件该之后】–》
g h
3
只是改变显示的值:
# awk ‘{gsub($NR,NR);print $0}’ awk.txt
//
awk sub和gsub区别及用法
//
关于awk命令的几个内置变量(NF,NR,FS,FILENAME)
6》awk修改文件中的
第一行最后一列设为1;第二行最后一列设为2;……以此类推
a b
c
《–【 文件该之前】
a b
1
d e
f
d e
2
g h
i
【文件该之后】–》
g h
3
只是改变显示的值:
# awk ‘$NF=NR’ awk.txt
7》awk修改文件中的
第一行第一列设为hi;第二行第一列设为hello;第三行第一列设为‘你好’
a
b c
《–【 文件该之前】 hi
b c
d
e
f
hello
e
2
g
h i
【文件该之后】–》 你好
h 3
只是改变显示的值:
# awk ‘{if(NR==1)$1=”hi”;else if(NR==2)$1=”hello”;else if(NR==3)$1=”你好”}1’ awk.txt
参考的链接有:
linux下awk内置函数的使用(split/substr/length)
: http://www.cnblogs.com/sunada2005/p/3493941.html
使用AWK进行分割字符串以及截取字符串: https://blog.csdn.net/amkio/article/details/40656991
去掉文件中所有的双引号: https://zhidao.baidu.com/question/1608917480852840147.html?fr=iks&word=awk%B9%FD%C2%CB%D7%D6%B7%FB%B4%AE%D6%D0%B5%C4%B5%A5%D2%FD%BA%C5&ie=gbk