目录
sed -e 对文件执行操作,并打印输出到控制台,-n可以取消打印输出
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦
sed -n 取消自动打印,sed执行会自动在终端打印输出结果,-n可以取消打印
sed -f scriptfile 指定的文件中是sed编辑命令
grep,sed和awk都是读一行处理一行,直到处理完成。
sed
用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作。
参数:
-i :: 直接对源文件进行修改
-e :: 执行操作并打印输出到控制台,源文件不会修改
-n :: 执行操作取消打印输出到控制台
-f :: 执行sed编辑命令的文件
sed -i 直接对文件进行操作,不会在终端打印
[shuqiq@shuqiq mybash]$ cat sed.txt
a
aa
aaa
bbbb
bbbbb
bbb
bb
b
0023 456
0023456
[shuqiq@shuqiq mybash]$ sed "s/00/1/" -i sed.txt
[shuqiq@shuqiq mybash]$ cat sed.txt
a
aa
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
sed -e 对文件执行操作,并打印输出到控制台,-n可以取消打印输出
操作动作:
-
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
##格式为::: sed [option] '操作选项\字符串'
##或者::: sed [option] '操作选项 字符串'
##每行后面追加字符串
[shuqiq@shuqiq mybash]$ sed -e "a\new line" sed.txt
a
new line
aa
new line
aaa
new line
bbbb
new line
bbbbb
new line
bbb
new line
bb
new line
b
new line
123 456
new line
123456
new line
##第n行后面追加字符串
[shuqiq@shuqiq mybash]$ sed -e "1a new line" sed.txt
a
new line
aa
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
##第n到m行后面追加字符串
[shuqiq@shuqiq mybash]$ sed -e "1,3a\xxxx" sed.txt
a
xxxx
aa
xxxx
aaa
xxxx
bbbb
bbbbb
bbb
bb
b
123 456
123456
##从n行到最后一行
[shuqiq@shuqiq mybash]$ sed '3,$a\xxx' sed.txt
a
aa
aaa
xxx
bbbb
xxx
bbbbb
xxx
bbb
xxx
bb
xxx
b
xxx
123 456
xxx
123456
xxx
-
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
##格式为::: sed [option] '操作选项\字符串'
##或者::: sed [option] '操作选项 字符串'
##字符串取代n到m行
[shuqiq@shuqiq mybash]$ sed -e "1,3c\xxxx" sed.txt
xxxx
bbbb
bbbbb
bbb
bb
b
123 456
123456
##字符串取代第n行
[shuqiq@shuqiq mybash]$ sed -e "3c\xxxx" sed.txt
a
aa
xxxx
bbbb
bbbbb
bbb
bb
b
123 456
123456
##字符串取代所有行
[shuqiq@shuqiq mybash]$ sed -e "c\xxxx" sed.txt
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
xxxx
-
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
##删除掉最后n行
[shuqiq@shuqiq mybash]$ sed -e '3,$d' sed.txt
a
aa
##删除掉第一行
[shuqiq@shuqiq mybash]$ sed -e "1d" sed.txt
aa
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
##删除掉 n至m行
[shuqiq@shuqiq mybash]$ sed -e "1,3d" sed.txt
bbbb
bbbbb
bbb
bb
b
123 456
123456
##删除掉空行
[shuqiq@shuqiq mybash]$ sed '/^ $/d' sed.txt
a
aa
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
-
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
##i与a相似只是,i在行前插入,a在行后插入
##格式为::: sed [option] '操作选项\字符串'
##或者::: sed [option] '操作选项 字符串'
##每行前面插入字符串
[shuqiq@shuqiq mybash]$ sed 'i\xxx' sed.txt
xxx
a
xxx
aa
xxx
aaa
xxx
bbbb
xxx
bbbbb
xxx
bbb
xxx
bb
xxx
b
/xxx
123 456
/xxx
123456
##第n行前面插入字符串
[shuqiq@shuqiq mybash]$ sed '1i xxx' sed.txt
xxx
a
aa
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
##第n到m行的每一行前面插入字符串
[shuqiq@shuqiq mybash]$ sed '1,3i\xxx' sed.txt
xxx
a
xxx
aa
xxx
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
##第n行到最后一行的每一行之前插入字符串
[shuqiq@shuqiq mybash]$ sed '4,$i\xxx' sed.txt
a
aa
aaa
xxx
bbbb
xxx
bbbbb
xxx
bbb
xxx
bb
xxx
b
xxx
123 456
xxx
123456
-
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
##打印结果
[shuqiq@shuqiq mybash]$ sed p sed.txt
a
a
aa
aa
aaa
aaa
bbbb
bbbb
bbbbb
bbbbb
bbb
bbb
bb
bb
b
b
123 456
123 456
123456
123456
-
s :取代,可以直接进行取代
的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦
##把每行的第一个ooo字符替换成bb字符
[shuqiq@shuqiq mybash]$ sed -e "s/ooo/bb/" sed.txt
a
aa
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
##把每行的第一个bb字符替换成ooo字符,aa替换成xxx,多次执行用多个-e
[shuqiq@shuqiq mybash]$ sed -e "s/aa/xxx/" -e "s/bb/ooo/" sed.txt
a
xxx
xxxa
ooobb
ooobbb
ooob
ooo
b
123 456
123456
##把每行的所有bb字符替换成ooo
[shuqiq@shuqiq mybash]$ sed 's/bb/ooo/g' sed.txt
a
aa
aaa
oooooo
oooooob
ooob
ooo
b
123 456
123456
##把第n行到第m行的每一行的bb替换为ooo
[shuqiq@shuqiq mybash]$ sed '2,4s/bb/ooo/g' sed.txt
a
aa
aaa
oooooo
bbbbb
bbb
bb
b
123 456
123456
##把第n行到最后一行的每一个bb替换为ooo
[shuqiq@shuqiq mybash]$ sed '1,$s/bb/ooo/g' sed.txt
a
aa
aaa
oooooo
oooooob
ooob
ooo
b
123 456
123456
sed -n 取消自动打印,sed执行会自动在终端打印输出结果,-n可以取消打印
[shuqiq@shuqiq mybash]$ sed -n -e "s/ooo/bb/" sed.txt
[shuqiq@shuqiq mybash]$ cat sed.txt
a
aa
aaa
bbbb
bbbbb
bbb
bb
b
123 456
123456
sed -f scriptfile 指定的文件中是sed编辑命令
[shuqiq@shuqiq mybash]$ vi ll_sed.sh
[shuqiq@shuqiq mybash]$ cat ll_sed.sh
s/bb/ooo/g
[shuqiq@shuqiq mybash]$ sed -f ll_sed.sh sed.txt
a
aa
aaa
oooooo
oooooob
ooob
ooo
b
123 456
123456
awk
用来处理文本,将文本按照指定的格式输出。其中包含了变量,循环以及数组
[shuqiq@shuqiq mybash]$ cat awk.txt
1,2,3,4,5,6
aa aa aa aa aaa
bbb bb bbbb bb
ccc cc cc cc cc
d d d d d
1 2 3 4 5 6 7
a,b,c,d,e,f,g
##打印文件按空格或者tab分割的n到m列
[shuqiq@shuqiq mybash]$ awk '{print $1,$2}' awk.txt
1,2,3,4,5,6
aa aa
bbb bb
ccc cc
d d
1 2
a,b,c,d,e,f,g
##过滤出第n列符合布尔表达式的结果
[shuqiq@shuqiq mybash]$ awk '$1>2' awk.txt
aa aa aa aa aaa
bbb bb bbbb bb
ccc cc cc cc cc
d d d d d
a,b,c,d,e,f,g
运算符 描述 = += -= *= /= %= ^= **= 赋值 ?: C条件表达式 || 逻辑或 && 逻辑与 ~ 和 !~ 匹配正则表达式和不匹配正则表达式 < <= > >= != == 关系运算符 空格 连接 + - 加,减 * / % 乘,除与求余 + - ! 一元加,减和逻辑非 ^ *** 求幂 ++ -- 增加或减少,作为前缀或后缀 $ 字段引用 in 数组成员
参数:
-F 使用指定的字符串分割
##使用指定字符分割取出n到m列
[shuqiq@shuqiq mybash]$ awk -F'b' '{print $1,$2}' awk.txt
1,2,3,4,5,6
aa aa aa aa aaa
ccc cc cc cc cc
d d d d d
1 2 3 4 5 6 7
a, ,c,d,e,f,g
-v 使用变量
##使用变量
[shuqiq@shuqiq mybash]$ awk -v a=9 '{print $1+a,$2}' awk.txt
10
9 aa
9 bb
9 cc
9 d
10 2
9
-f 执行文件,是awk编辑命令的文件
grep
过滤
常用选项:
-
-i
:忽略大小写进行匹配。
[shuqiq@shuqiq mybash]$ grep i -i 9_9_\*.sh
#!/bin/bash
for ((i=1;i<=j;i++));
printf "$i x $j = $(($i*$j))\t";
printf "\n"
-
-v
:反向查找,只打印不匹配的行。
[shuqiq@shuqiq mybash]$ grep i -v 9_9_\*.sh
for ((j=1;j<=9;j++));
do
do
done
done
-
-n
:显示匹配行的行号。
[shuqiq@shuqiq mybash]$ grep i -n 9_9_\*.sh
1:#!/bin/bash
4: for ((i=1;i<=j;i++));
6: printf "$i x $j = $(($i*$j))\t";
8: printf "\n"
-
-r
:递归查找子目录中的文件。
[shuqiq@shuqiq mybash]$ grep i -r ./
./if_compare_test.sh:#!/bin/bash
./if_compare_test.sh:#if test $1 -eq $2 ;then
./if_compare_test.sh:#elif test $1 -lt $2 ;then
./if_compare_test.sh:#fi
./if_compare_test.sh:#if test $1 -nt $2 ;then
./if_compare_test.sh:#elif test $1 -ot $2 ;then
./if_compare_test.sh:#fi
./if_compare_test.sh:#if (($1>$2)) ;then
./if_compare_test.sh:#elif (($1<$2)) ;then
./if_compare_test.sh:#fi
./100_sum_oushu.sh:#!/bin/bash
./100_sum_oushu.sh:for i in `seq 2 2 100`;
-
-l
:只打印匹配的文件名。
[shuqiq@shuqiq mybash]$ grep i -rl ./
./if_compare_test.sh
./100_sum_oushu.sh
./uninstall_mysql.sh
./installtomcat.sh
./installjdk.sh
./eof_test.sh
./100_sum_jishu.sh
./9_9_*.sh
./guess.sh
./hhh2.sh
./sum_100.sh
./wc_d.sh
-
-c
:只打印匹配的行数。
[shuqiq@shuqiq mybash]$ grep i -c 9_9_\*.sh
4