原始文件redis.conf内容:
1 | input { |
获取sed匹配内容的下一行
原始文件redis.conf内容:
思路:
若要只抓取tags => ["logstashdemo"]
内容,则需要匹配type => "logstash-redis-demo"
这一行内容。sed匹配内容下一行写法:
sed -n '/matchString/{n;p}' filename
1 | [root@leanote ~]# sed -n '/logstash-redis-demo/{n;p}' redis.conf |
替换sed匹配行内容的下一行的指定内容
思路:
先匹配到tags => ["logstashdemo"]
内容,然后对该内容下一行内容tags => ["logstashdemo"]
的logstashdemo
改为replacedemo
sed替换匹配行下一行内容写法:
sed -i '/查询匹配的内容/{n;s/下一行内要被替换的内容/替换内容/;}' filename
1 | [root@leanote ~]# sed -i '/logstash-redis-demo/{n;s/logstashdemo/replacedemo/;}' redis.conf |
sed内容存在变量情况
- 方法一,将外部单引号用双引号替代
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21[root@leanote ~]# echo $beitihuan
list
[root@leanote ~]# echo $tihuan
str
[root@leanote ~]# sed -e "/key/{n;s/${beitihuan}/${tihuan}/;}" redis.conf
input {
redis {
host => "127.0.0.1:6379"
key => "logstash:demo"
data_type => "str"
codec => "json"
type => "logstash-redis-demo"
tags => ["replacedemo"]
}
}
output {
elasticsearch {
host => "127.0.0.1:9200"
}
} - 方法二,不修改外部单引号,将变量用单引号引起来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@leanote ~]# sed -e '/key/{n;s/'${beitihuan}'/'${tihuan}'/;}' redis.conf
input {
redis {
host => "127.0.0.1:6379"
key => "logstash:demo"
data_type => "str"
codec => "json"
type => "logstash-redis-demo"
tags => ["replacedemo"]
}
}
output {
elasticsearch {
host => "127.0.0.1:9200"
}
} - 注意点
- *如果变量存在特殊符号,比如
/
,那么此时这个符号会影响sed的分隔符,需要将sed分隔符替换成其他的。**
sed对软连文件进行操作
sed对软连文件
进行操作,倘若不指定--follow-symlinks
,则软连文件和原始文件会被拆分,原始文件不会被修改,而软连的文件会被修改,且变成一个独立文件。
sed操作没有指定--follow-symlinks
1 | [root@leanote conf]# ll |
sed操作指定--follow-symlinks
1 | [root@leanote conf]# sed -i --follow-symlinks '/key/{n;s/'${beitihuan}'/'${tihuan}'/;}' redis.conf |