sed 的所有处理内容都是在缓存中进行的 所以修改不会对源文件产生影响 要想修改源文件需要添加 -i 选项
sed 格式 # sed [选项] ‘[动作指令]’ filename
p 打印 sed ‘/betty/p’ test.txt 打印有betty 的行 但是其他内容也会默认输出 所以需要和 -n 配合使用
-n 禁止默认输出
sed -n ‘/betty/p’ test.txt 只打印有betty字符串的行
sed -n ‘2p’ 打印第二行
sed -n ‘2,4p’ test.txt sed -n -e ‘2p’ -e ‘3p’ -e ‘4p’ test.txt 打印2-4行 多个命令可以用 -e,也可以用;隔开
sed -n ‘1,$p’ test.txt 打印1-最后一行
s替换 格式 sed 's/要被替换的/替换的/g 全局替换
sed ‘2s/要被替换的/替换的/2’ 第二行 第二个匹配的字符被替换
路径分隔符可以替换成@@ 或 |
sed ‘2s/要被替换的/替换的/’ 第二行 第一个匹配的字符被替换
sed ‘3,
s
/
要
被
替
换
的
/
替
换
的
/
′
从
第
三
行
到
最
后
一
行
的
匹
配
的
第
一
个
字
符
被
替
换
s
e
d
′
3
,
s/要被替换的/替换的/' 从第三行到最后一行的匹配的第一个字符被替换 sed '3,
s/要被替换的/替换的/′从第三行到最后一行的匹配的第一个字符被替换sed′3,s/要被替换的/替换的/g’ 从第三行到最后一行所有被匹配到的字符都被替换
sed ‘4s/^/#/’ 第四行开头加上#号
sed 's/never/@@/;s/cat/dog '多个命令使用用 -e
如何取得网卡地址
ifconfig ens33 | grep ‘inet>’ | sed ‘s/^.inet //’ | sed 's/n.$//’
d删除行 sed ‘d’ 删除所有
sed ‘2,3d’ 删除2-3行
sed ‘3,$d’ 删除3-结尾的行
sed ‘/想要匹配的字符串/d’ 删除有匹配字符串的行 注:在此强调,在默认情况下 sed 并不会修改原始文件,这里被删除的行只是从 sed 的输出中消失了,原始文件没做任何改变。
i 添加行 i在指定行前面插入 sed ‘3i\hello’ 在第三行前面插入
a 添加行 a在指定行后面插入 sed ‘3a\hello’ 在第三行后面插入
sed ‘$a\hello’ 在最后一行插入内容
sed ‘2,4a\hello’ 在2-4行后面插入
如何插入多行 想追加或插入多行数据,则除最后一行外,每行的末尾都要加入""代表数据未完结。
sed ‘2i\hello
world
haha’ test.txt
c修改行 将指定中的行中的所有内容都替换成后面的字符串
sed ‘2c\hello’ 第二行的内容替换成hello
sed ‘2,$c\hello’ 第二行到最后一行的内容替换成hello
sed ‘/when/c\hello’ 有when 的行都替换成hello
r读取 格式: [address]r filename 把filename 文件的内容插入到 address指定行的后面
sed ‘3r /etc/hosts’ test.txt 把/etc/hosts 的所有内容 读取插入到第三行后面
sed ‘$r /etc/hosts’ test.txt 把/etc/hosts 的内容读取插入到最后一行
w写入 sed -n ‘s/cat/dog/w test2.txt’ tet.txt 把修改的行写入到test2.txt
sed -n ‘/hello/w test2.txt’ test.txt 把有hello字符的行写入到test2.txt
i对源文件直接修改 sed -i ‘s/cat/dog/’ test.txt 原文件的内容也会被替换
i.bak 修改源文件之前先备份一个没有修改的 sed -i.bak ‘s/cat/dog/’ test.txt
sed -r sed支持正则表达式 -r选项支持扩展元字符
sed -r 's/^[0-9]+//g' test.txt 把开头是数字的行 把数字替换成空
如何给行内所有行打印上行号
#sum=cat filename | wc -l
#for i in seq 1 $sum
;do sed -i “
i
s
/
/
{i}s/^/
is//{i})/” test_rule.txt ;done
awk也是一个数据处理工具
格式:awk [-F 分隔符] '命令' filename 其中,[-F域分隔符]是可选的,因为awk使用空格或tab键作为缺省的域分隔符
不指名-F域分隔符的情况下,默认的域分隔符是空格或tab键。
awk 完整格式
awk [-F] '匹配规则{执行命令}' filename
awk '/^$/{print "black line"}' 文件中每有一个空行 就打印一次 black line
任何awk语句都是由'匹配规则{执行命令}'组成,一个awk中可以有多个语句。匹配规则决定执行命令的执行条件。
默认情况下,awk 会将如下变量分配给它在文本行中发现的数据字段:
$0 代表整个文本行;
$1 代表文本行中的第 1 个数据字段;
$2 代表文本行中的第 2 个数据字段;
$n 代表文本行中的第 n 个数据字段。
~(匹配)
!~(不匹配)
awk -F : ‘
7
/
b
a
s
h
7 ~/bash
7 /bash/{print $1}’ /etc/passwd 如果用户可以登录就输出用户名
第7区域 ~匹配 bash结尾的字符串 如果匹配到了就打印第一区域的内容