安徽苏亚建设安装有限公司网站,seo搜索优化工程师招聘,农业网站开发,网页制作软件免费三剑客的概述#xff1a;
awk、grep、sed是linux操作文本的三大利器#xff0c;合称文本三剑客#xff0c;也是必须掌握的linux命令之一。三者的功能都是处理文本#xff0c;但侧重点各不相同#xff0c;其中属awk功能最强大#xff0c;但也最复杂。grep更适合单纯的查找…三剑客的概述
awk、grep、sed是linux操作文本的三大利器合称文本三剑客也是必须掌握的linux命令之一。三者的功能都是处理文本但侧重点各不相同其中属awk功能最强大但也最复杂。grep更适合单纯的查找或匹配文本sed更适合编辑匹配到的文本awk更适合格式化文本对文本进行较复杂格式处理。 一grep命令
grep命令是一种文本搜索工具他能使用正则表达式搜索文本并把匹配的行打印出来grep的全称是Golobal Regular Expression Print表示全局正则表达式版本它的使用权限是所有用户.
grep可用于shell脚本因为grep通过返回一个状态值来说明搜索的状态如果模板搜索成功则返回0如果搜索不成功则返回1如果搜索的文件不存在则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
1.1 基本语法
grep [选项] 模式 [文件...]# 管道命令一起
命令 | grep xxxx
模式你想要在文件中搜索的文本或正则表达式。文件...你想要搜索的文件列表。如果省略文件名grep 会从标准输入通常是键盘输入或另一个命令的输出中读取数据。
常用选项
常用选项释义-i忽略大小写进行匹配。-v反向查找只打印不匹配的行。-n显示匹配行的行号。-r递归查找子目录中的文件。-l只打印匹配的文件名。-c只打印匹配的行数。-w只匹配整个单词而不是部分匹配。-o只显示匹配的部分而不是整行。-A n显示匹配行及后面n行的内容。-B n显示匹配行及前面n行的内容。-C n显示匹配行及前后各n行的内容。-e pattern指定多个匹配模式。-E使用扩展正则表达式进行匹配。-F将模式视为固定字符串而不是正则表达式。
1.2 使用举例
示例1
准备test # -A2 7 的效果就是找到 7 然后输出 2 后面两行
[rootlocalhost ~]# grep -A2 7 test# -B2 7找到 7 然后输出 2 前面两行
[rootlocalhost ~]# grep -B2 7 test #查找test中的aaa
[rootlocalhost ~]# grep -c aaa test# -i忽略大小写
[rootlocalhost ~]# grep -i aaa test# -n显示匹配的行号
[rootlocalhost ~]# grep -n -i aaa test # -c输出匹配到的共计行数
[rootlocalhost ~]# grep -c aaa test#-n输出匹配到的这些行的内容以及它们各自的行号。
[rootlocalhost ~]# grep -n aaa test # -e实现多个匹配之间的或关系查找包含aaa或者bbb的
[rootlocalhost ~]# grep -e aaa -e bbb test grep -F
grep -F相当于fgrep命令就是将pattern视为固定字符串。
grep命令中的-F选项用于将搜索模式视为固定字符串fixed strings而不是正则表达式regular expressions。这意味着grep在搜索时不会将搜索模式中的特殊字符如.、*、?、[、]、^、$、\{、\}、|、\、(、)等视为正则表达式的元字符而是将它们视为普通字符。
使用-F选项可以加快搜索速度特别是当你知道搜索模式不包含任何正则表达式元字符或者你不希望grep对这些字符进行特殊处理时。
例如如果你有一个文件example.txt内容如下
hello.world
hello*world
hello?world
hello[world
如果你想要搜索包含hello*world这个确切字符串的行注意这里的*是普通字符不是正则表达式中的“零个或多个前面字符”的意思你可以使用grep -F来实现
grep -F hello*world example.txt
这个命令会输出
hello*world
如果你不使用-F选项grep会将*视为正则表达式元字符并尝试匹配零个或多个o字符这可能会导致不同的结果具体取决于文件内容。
总结来说-F选项让grep将搜索模式视为纯文本字符串不进行正则表达式的特殊字符处理。这在处理包含正则表达式元字符的文本时非常有用尤其是当你想要搜索这些元字符本身时。 grep -f
grep命令中的-f选项允许你从一个文件中读取正则表达式模式而不是直接在命令行中指定它们。这意味着你可以将多个搜索模式保存在一个文件中然后使用grep -f选项和该文件作为输入来搜索目标文件中的匹配项。
使用-f选项时你需要在文件中每行指定一个搜索模式。当grep运行时它会读取这个文件中的每一行并将其视为一个搜索模式然后在目标文件中查找这些模式的匹配项。
这个选项在处理多个搜索模式时非常有用特别是当这些模式太复杂或太多以至于直接在命令行中指定它们会变得不切实际时。
例如假设你有一个名为patterns.txt的文件内容如下
error
warning
notice
这个文件包含了你想要在另一个文件比如logfile.txt中搜索的三个模式。你可以使用以下命令来搜索这些模式
grep -f patterns.txt logfile.txt
这个命令会搜索logfile.txt文件中所有包含error、warning或notice的行并将它们打印出来。请注意patterns.txt文件中的每一行都被视为一个独立的正则表达式因此你可以在其中包含正则表达式的特殊字符尽管这可能会使模式匹配变得更加复杂。但是如果你只是想进行简单的文本匹配并且不希望grep将文件中的特殊字符视为正则表达式元字符你可以结合使用-F和-f选项但请注意-F选项实际上会覆盖对正则表达式元字符的特殊处理因此它可能不是你想要的效果除非你真的只想进行纯文本匹配。如果你想要从文件中读取模式但又不希望这些模式中的特殊字符被解释为正则表达式你可能需要手动转义这些特殊字符或者确保它们不是正则表达式的元字符。 # -v:显示不被匹配到的行
[rootlocalhost Desktop]# cat test | grep -v -i aa 1.3 grep egrep fgrep grep可以使用基本正则表达式进行内容查找匹配 egrep可以使用扩展的正则表达式进行内容查找匹配 fgrep只能查找固定内容无法使用正则进行匹配 # 查找所有a开头结尾是z的内容
[rootlocalhost ~]# grep a.*z data# 查找以a开头结尾为z或者以a开头结尾为c的内容
[rootlocalhost ~]# egrep a.*z|a.*c data# 只查找内容是axz的内容
[rootlocalhost ~]# fgrep a*z data
[rootlocalhost ~]# grep -F a*z data 二sed命令
在Linux中sedstream editor是一种非常强大的流编辑器它可以对文本进行过滤和转换。sed命令读取输入流文件、管道等对每一行应用你指定的编辑命令然后将结果输出到标准输出通常是屏幕但也可以重定向到文件。sed非常适合于执行文本替换、删除、插入和选择等操作。
2.1sed的基本语法 sed [-nefri] ‘command’ 输入文本
选项说明
-n∶使用安静(silent)模式。在一般 sed 的用法中所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑
-f∶直接将 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 2.2 使用举例
定义文件test内容如下 HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test 2.2.1增加内容
增加一行
在test输出的第一行后面追加一句my name is dijia
[rootlocalhost sedTest]# sed 1a my name is dijia test
HELLO LINUX!
my name is dijia
Linux is a free unix-type opterating system.
This is a linux testfile!
注意只是将文字处理了没有写入到文件里文件里还是之前的内容。
查看文件的内容
[rootlocalhost sedTest]# cat test
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile! 发现文件的内容并没有发生任何的变化
增加多行
在一行到第三行的后面追加上my name is dijia
[rootlocalhost sedTest]# sed 1,3a my name is dijia test
HELLO LINUX!
my name is dijia
Linux is a free unix-type opterating system.
my name is dijia
This is a linux testfile!
my name is dijia2.2.2插入内容
在最后一行插入byebye
[rootlocalhost sedTest]# sed $a byby test
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
byby在这之前都是修改的输出内容如果要修改文件中的真实内容加上一个 -i 就可以
如
[rootlocalhost sedTest]# sed - i $a byby test
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
byby2.2.3删除内容
删除的字符是d用法跟前面也很相似对匹配到的数据行进行删除。
删除第一行
Linux test[rootlocalhost sedTest]# sed 1d test
Linux is a free unix-type opterating system.
This is a linux testfile! 删除最后一行
[rootlocalhost sedTest]# sed $d test
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
删除1到3行
[rootlocalhost sedTest]# sed 1,3d test
Linux test[rootlocalhost sedTest]# 删除第二行到最后一行
[rootlocalhost sedTest]# sed 1,3d test
Linux test[rootlocalhost sedTest]# 删除Linux打头的
[rootlocalhost sedTest]# sed /Linux/d test
HELLO LINUX!
This is a linux testfile!
2.2.4:替换内容
将含有Linux的哪一行替换为dijia
Linux test[rootlocalhost sedTest]# sed /Linux/c dijia test
HELLO LINUX!
dijia
This is a linux testfile!
dijia字符替换
s替换指定字符
语法 sed s/原来的字符/新的字符/g 文件名
将Linux的字符替换为dijia
[rootlocalhost sedTest]# sed s/Linux/dijia/g test
HELLO LINUX!
dijia is a free unix-type opterating system.
This is a linux testfile!
dijia test[rootlocalhost sedTest]# 给每一行内容前都加上###
[rootlocalhost sedTest]# sed s/^/###/g test
###HELLO LINUX!
###Linux is a free unix-type opterating system.
###This is a linux testfile!
###Linux test[rootlocalhost sedTest]# 给每一行内容后都加上###
[rootlocalhost sedTest]# sed s/$/###/g test
HELLO LINUX! ###
Linux is a free unix-type opterating system. ###
This is a linux testfile! ###
Linux test###[rootlocalhost sedTest]# 这个其实就是正则表达式的语法其他类似语法还有 ^ 表示一行的开头。如/^#/ 以#开头的匹配。
$ 表示一行的结尾。如/}$/ 以}结尾的匹配。
\ 表示词首。 如\abc 表示以 abc 为首的詞。This is a cat abcTest abcQQQ
\ 表示词尾。 如abc\ 表示以 abc 結尾的詞。. 表示任何单个字符。
* 表示某个字符出现了0次或多次。
[ ] 字符集合。 如[abc] 表示匹配a或b或c还有 [a-zA-Z] 表示匹配所有的26个字符。如果其中有^表示反 如 [^a] 表示非a的字符2.2.5:多个匹配
用-e命令可以执行多次匹配相当于顺序依次执行两个sed命令
同时给每行内容的前后都加上###
[rootlocalhost sedTest]# sed -e s/^/###/g -e s/$/###/g sed-1
###HELLO LINUX! ###
###Linux is a free unix-type opterating system. ###
###This is a linux testfile! ###
###Linux test###[rootlocalhost sedTest]# ^C
2.2.6日志截取
定位日志
在系统应用集中部署的时候很多日志因为太多难以定位获取某段时间的日志是对运维人员非常关键的事情。
sed查看某时间的系统日志
sed -n /2024-03-17 09:25:55/,/2024-03-18 09:25:55/p logfile
sed查看某时间段到现在的系统日志
sed -n /2024-03-17 09:25:55/,$p logfile 三awk命令
AWK 是一种处理文本文件的语言是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred AhoPeter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符
linux中有三剑客之称 三剑客之首就是 AWK
三剑客 功能:
grep 过滤文本
sed : 修改文本
awk : 处理文本
awk只要是用来格式化文本
3.1 基本语法
awk [参数] [处理内容] [操作对象]
参数说明
参数说明-F separator指定字段分隔符。-f file从指定的文件中读取程序-v varvalue定义awk程序中的一个变量及其默认值-mf N指定要处理的数据文件中的最大字段数-mr N指定数据文件中的最大数据行数-W keyword指定awk的兼容模式或警告等级
4.2 使用举例
4.2.1 从命令行读取程序脚本
awk 动作 文件名
准备一个文件test
## 4.2 使用举例### 4.2.1 从命令行读取程序脚本
awk 动作 文件名
准备一个文件test~~~shell
2 this is a test
3 Are you like awk
Thiss a test
10 There are orange,apple,mongo
1 zs 男 A11 80;90;100
2 ls 男 A12 80;50;60
3 ww 女 A13 30;20;40
4 aa 女 A14 50;20;40
5 zl 男 A15 50;60;30
~~~ 打印第二行内容
[rootlocalhost awkTest]# awk {print $2} test
this
Are
a
There
zs
ls
ww
aa
zl打印第一列和第四列的内容
[rootlocalhost awkTest]# awk {print $1,$4} test
2 a
3 like
Thiss
10 orange,apple,mongo
1 A11
2 A12
3 A13
4 A14
5 A15
[rootlocalhost awkTest]# 打印以逗号分隔的第一列值和第二列值
[rootlocalhost awkTest]# awk -F {print $1,$2} test
2 this
3 Are
Thiss a
10 There
1 zs
2 ls
3 ww
4 aa
5 zl匹配项中可以用正则表达式比如
查找以This开头的行
[rootlocalhost ~]# awk /^This/ test3
查找以awk为结束的行
[rootlocalhost ~]# awk /awk$/ test
匹配的就是严格以This开头的内容。 使用数据字段变量
awk会将如下变量分配给它在文本行中发现的数据字段(列) $0代表整个文本行 $1代表文本行中的第1个数据字段 $2代表文本行中的第2个数据字段 $n代表文本行中的第n个数据字段。 !: 逻辑非 ~ : 进行正则匹配(类似于关系表达式)
查找不包含is关键字的内容
[rootlocalhost awkTest]# awk $0 !~ /is/ test
3 Are you like awk
10 There are orange,apple,mongo
1 zs 男 A11 80;90;100
2 ls 男 A12 80;50;60
3 ww 女 A13 30;20;40
4 aa 女 A14 50;20;40
5 zl 男 A15 50;60;30查找包含is关键字的内容
[rootlocalhost awkTest]# awk $0 ~ /is/ test
2 this is a test
Thiss a test4.2.2 变量
wk中有不少内置的变量比如$NF代表的是分割后的字段数量相当于取最后一个。
NF: number filed 当前行分割后的字段个数。打印的时候是取出最后一列
NR: number row 表示当前第几行
[rootlocalhost awkTest]# awk {print $NF} test
test
awk
test
orange,apple,mongo
80;90;100
80;50;60
30;20;40
50;20;40
50;60;30输出当前行有几列以及当前是第几行 每行内容后的两个数字一共有几列是第几行
[rootlocalhost awkTest]# awk {print $0,NF,NR} test
2 this is a test 5 1
3 Are you like awk 5 2
Thiss a test 3 3
10 There are orange,apple,mongo 4 4
1 zs 男 A11 80;90;100 5 5
2 ls 男 A12 80;50;60 5 6
3 ww 女 A13 30;20;40 5 7
4 aa 女 A14 50;20;40 5 8
5 zl 男 A15 50;60;30 5 9其他的内置变量还有
变量名说明FILENAME当前文件名FS字段分隔符默认是空格和制表符。RS行分隔符用于分割每一行默认是换行符。OFS输出字段的分隔符用于打印时分隔字段默认为空格。ORS输出记录的分隔符用于打印时分隔记录默认为换行符。OFMT数字输出的格式默认为.6g。
执行输出结果的各个列用指定符号分隔
[rootlocalhost awkTest]# awk {print $1,$2,$3} OFS- test
2-this-is
3-Are-you
Thiss-a-test
10-There-are
1-zs-男
2-ls-男
3-ww-女
4-aa-女
5-zl-男
4.2.3 函数
awk还提供了一些内置函数方便对原始数据的处理。主要如下
toupper()字符转为大写。
tolower()字符转为小写。
length()返回字符串长度。
substr()返回子字符串。
sin()正弦。
cos()余弦。
sqrt()平方根。
rand()随机数。
将每行内容的最后一列转为大写形式输出
[rootlocalhost awkTest]# awk {print toupper($NF)} test
TEST
AWK
TEST
ORANGE,APPLE,MONGO
80;90;100
80;50;60
30;20;40
50;20;40
50;60;30将当前行的第一列转为大写内容输出并输出当前行的长度
[rootlocalhost ~]# awk {print toupper($1),length($0)} test
2 16
3 18
THISS 13
10 31 4.2.3 条件
awk允许指定输出条件只输出符合条件的行。输出条件要写在动作的前面
awk 条件 动作 文件名
还是刚才的例子用逗号分隔之后有好几个空白行我们加上限制条件匹配后为空的不显示
[rootlocalhost awkTest]# awk -F, $2!{print $2} test
apple4.2.3.1 if 语句
awk提供了if结构用于编写复杂的条件。
将第一列内容大于2的行输出:
[rootlocalhost awkTest]# awk { if ( $1 2) print $0} test
3 Are you like awk
Thiss a test
10 There are orange,apple,mongo
3 ww 女 A13 30;20;40
4 aa 女 A14 50;20;40
5 zl 男 A15 50;60;304.2.3.2 begin 语句 end 语句
语法格式:
awk BEGIN{ commands } pattern{ commands } END{ commands }
多行操作
准备文件test02
111 222 333
444 555 666
777 888 999
[rootlocalhost awkTest]# awk BEGIN{print 开始} {print $1 - $2 - $3} END{print 结束} test02
开始
111-222-333
444-555-666
777-888-99
结束4.2.3.2 从文件中读取
假设有这么一个文件学生成绩表
[rootlocalhost ~]# cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
我们的 awk 脚本如下
#!/bin/awk -f
#运行前
BEGIN {
math 0;
english 0;
computer 0;printf NAME NO. MATH ENGLISH COMPUTER TOTAL\nprintf ---------------------------------------------\n
}
#运行中
{
math$3
english$4
computer$5printf %-6s %-6s %4d %8d %8d %8d\n, $1, $2, $3,$4,$5, $3$4$5
}
#运行后
END {printf ---------------------------------------------\nprintf TOTAL:%10d %8d %8d \n, math, english, computerprintf AVERAGE:%10.2f %8.2f %8.2f\n, math/NR, english/NR, computer/NR
}
我们来看一下执行结果
[rootlocalhost awkTest]# awk -f cal.awk score.txt
NAME NO. MATH ENGLISH COMPUTER TOTAL
---------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
---------------------------------------------TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00
[rootlocalhost awkTest]# 总结
grep: 主要用户行内容的检索通过正则表达式进行内容匹配不能修改匹配的内容
sed: 可以进行内容匹配对于匹配的内容可以进行修改
awk针对指定行内容进行复杂处理一般用于报表生成 文章转载自: http://www.morning.clbzy.cn.gov.cn.clbzy.cn http://www.morning.nnhfz.cn.gov.cn.nnhfz.cn http://www.morning.ydzly.cn.gov.cn.ydzly.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.ogzjf.cn.gov.cn.ogzjf.cn http://www.morning.lkgqb.cn.gov.cn.lkgqb.cn http://www.morning.wgqtj.cn.gov.cn.wgqtj.cn http://www.morning.jbqwb.cn.gov.cn.jbqwb.cn http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn http://www.morning.znlhc.cn.gov.cn.znlhc.cn http://www.morning.qynnw.cn.gov.cn.qynnw.cn http://www.morning.mrfnj.cn.gov.cn.mrfnj.cn http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn http://www.morning.zrkws.cn.gov.cn.zrkws.cn http://www.morning.hnkkm.cn.gov.cn.hnkkm.cn http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.mdmc.cn.gov.cn.mdmc.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn http://www.morning.nbgfz.cn.gov.cn.nbgfz.cn http://www.morning.lpppg.cn.gov.cn.lpppg.cn http://www.morning.wztlr.cn.gov.cn.wztlr.cn http://www.morning.dnwlb.cn.gov.cn.dnwlb.cn http://www.morning.hpggl.cn.gov.cn.hpggl.cn http://www.morning.rfmzc.cn.gov.cn.rfmzc.cn http://www.morning.lxbml.cn.gov.cn.lxbml.cn http://www.morning.clbgy.cn.gov.cn.clbgy.cn http://www.morning.crqpl.cn.gov.cn.crqpl.cn http://www.morning.sfdky.cn.gov.cn.sfdky.cn http://www.morning.jllnh.cn.gov.cn.jllnh.cn http://www.morning.btpll.cn.gov.cn.btpll.cn http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn http://www.morning.lwxsy.cn.gov.cn.lwxsy.cn http://www.morning.yjqkk.cn.gov.cn.yjqkk.cn http://www.morning.mttqp.cn.gov.cn.mttqp.cn http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.glnxd.cn.gov.cn.glnxd.cn http://www.morning.lxfdh.cn.gov.cn.lxfdh.cn http://www.morning.vattx.cn.gov.cn.vattx.cn http://www.morning.jqzns.cn.gov.cn.jqzns.cn http://www.morning.pqqxc.cn.gov.cn.pqqxc.cn http://www.morning.fmgwx.cn.gov.cn.fmgwx.cn http://www.morning.jhrkm.cn.gov.cn.jhrkm.cn http://www.morning.trqsm.cn.gov.cn.trqsm.cn http://www.morning.dxtxk.cn.gov.cn.dxtxk.cn http://www.morning.lcplz.cn.gov.cn.lcplz.cn http://www.morning.dbfj.cn.gov.cn.dbfj.cn http://www.morning.yfnjk.cn.gov.cn.yfnjk.cn http://www.morning.nlrxh.cn.gov.cn.nlrxh.cn http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn http://www.morning.pjqxk.cn.gov.cn.pjqxk.cn http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.fxkgp.cn.gov.cn.fxkgp.cn http://www.morning.jmdpp.cn.gov.cn.jmdpp.cn http://www.morning.wfspn.cn.gov.cn.wfspn.cn http://www.morning.kgkph.cn.gov.cn.kgkph.cn http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn http://www.morning.thrtt.cn.gov.cn.thrtt.cn http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn http://www.morning.lpbrp.cn.gov.cn.lpbrp.cn http://www.morning.lthgy.cn.gov.cn.lthgy.cn http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.qcdhg.cn.gov.cn.qcdhg.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.mlckd.cn.gov.cn.mlckd.cn http://www.morning.xqkjp.cn.gov.cn.xqkjp.cn http://www.morning.rzbcz.cn.gov.cn.rzbcz.cn http://www.morning.xkzmz.cn.gov.cn.xkzmz.cn http://www.morning.sgpnz.cn.gov.cn.sgpnz.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.gwwky.cn.gov.cn.gwwky.cn http://www.morning.ftdlg.cn.gov.cn.ftdlg.cn http://www.morning.gjws.cn.gov.cn.gjws.cn http://www.morning.lhxdq.cn.gov.cn.lhxdq.cn