appsettings.json
查
指定行号,精确查找
格式:sed -n ‘lp’ file
参数:-n 表示行号,l表示具体的行号,p表示显示
# 查找第三行文件,
sed -n '3p' messages
# 查找最后一行
sed -n '$p' messages
指定行号的范围查找
# 查找1-5行
sed -n '1,5p' messages
# 查找3行到最后一行
sed -n '3,$p' messages
使用正则查找
使用扩展正表达式,需要加上-r
# regex 正则表达式
sed -n '/regex/p' messages
# 统计空行
sed -nr '/^$/p' messages | wc -l
使用正则查找一个范围
# 查找regex1到regex2的内容
# 若regex1找不到,则最后的结果是空
# 若regex2找不到,则从regex1开始,一直到最后都是查找的内容
sed -n '/regex1/,/regex2/p' messages
行号和正则混合使用
# 从第10行开始,查找到regex
sed -n '10,/regex/p' messages
# 从regex开始,查找到1000行
sed -n '/regex/,1000p' messages
# 从regex开始,查找接下来的n行
sed -n 'regex/,+np' messages
➜ Desktop sed -n -r '/ConnectionStrings/,+3p' appsettings.json
"ConnectionStrings": {
"Mongo": "mongodb://localhost:27017/windsom",
"Influx": "http://localhost:8086/windsom"
},
输出奇偶行,n表示读入下一行
# 输出奇数行
➜ Desktop sed -n 'p;n' appsettings.json
{
"ConnectionStrings": {
"Influx": "http://localhost:8086/windsom"
"Extensions": {
"Synchronizer": {
"Interval": 5,
}
}
# 输出偶数行
➜ Desktop sed -n 'n;p' appsettings.json
"BinaryBase": "M:\\binary\\windsom",
"Mongo": "mongodb://localhost:27017/windsom",
},
"MHCC.XSOM.WebService.MDC": {
"Enabled": true,
"PageSize": 5
}
}
# 输出某行之后的偶数行
➜ Desktop sed -n '6,${n;p}' appsettings.json
"Extensions": {
"Synchronizer": {
"Interval": 5,
}
}
输出文本的总行数
➜ Desktop sed -n '$=' appsettings.json
17
删
增
格式:sed ‘lc|a|i content’ file
参数 | 含义 |
---|---|
l | 行数 |
c | 替换一行 |
a | 在某一行后追加一行 |
i | 在某一行前增加一行 |
替换一行
# 将第三行替换成了content
sed '3c content' messages
增加一行
# 在第三行后增加一行content
sed '3a content' messages
# 在第三行前增加一行content
sed '3i content' messages
改
格式:sed s#old#new#g file
参数:
- s是表示修改模式
: 可以使用任意字符表示,常用的是/、#、@
- old是需要被替换的内容,new是替换的内容
- g是表示全局替换,是指一行内的全局,如果没有g,则修改每行第一次匹配的内容
```bash
把每行的数字替换成空,即删除每行的数字
➜ Desktop echo ‘shell123abc’ | sed ‘s/[0-9]//g’ shellabc
删除第一个数字
➜ Desktop echo ‘shell123abc’ | sed ‘s/[0-9]//‘ shell23abc
删除第二个数字
➜ Desktop echo ‘shell123abc’ | sed ‘s/[0-9]//2’ shell13abc
<a name="k0X1N"></a>
#### 根据行号的范围进行修改
```bash
➜ Desktop sed '2,5s#windsom#xsom#' appsettings.json
{
"BinaryBase": "M:\\binary\\xsom",
"ConnectionStrings": {
"Mongo": "mongodb://localhost:27017/xsom",
"Influx": "http://localhost:8086/xsom"
},
"Extensions": {
"MHCC.XSOM.WebService.MDC": {
"Synchronizer": {
"Enabled": true,
"Interval": 5,
"PageSize": 5
}
}
}
}
根据正则匹配范围
➜ Desktop sed '/"ConnectionStrings":/,/"Extensions":/s#windsom#xsom#' appsettings.json
{
"BinaryBase": "M:\\binary\\windsom",
"ConnectionStrings": {
"Mongo": "mongodb://localhost:27017/xsom",
"Influx": "http://localhost:8086/xsom"
},
"Extensions": {
"MHCC.XSOM.WebService.MDC": {
"Synchronizer": {
"Enabled": true,
"Interval": 5,
"PageSize": 5
}
}
}
}
将首字母转成大写
➜ Desktop echo 'shell' | sed 's/^./\U&/g'
Shell
将首字母转成小写
➜ Desktop echo 'Shell' | sed 's/^./\L&/g'
shell
sed 反向(后向)引用
案例1: 调换两个单词的位置
# 将dotnet_xsom转成xsom_dotnet
echo 'dotnet_xsom' | sed -r 's/(.*)_(.*)/\2_\1/g'
案例2: 使用-e参数后面接表达式,使用多个,这样就能达到多条件匹配
➜ Desktop sed -r -e 's#("BinaryBase": ").*windsom(.*)#\1/var/opt/xsom\2#' -e '/"ConnectionStrings":/,/"Extensions":/s#windsom#xsom#' appsettings.json
{
"BinaryBase": "/var/opt/xsom",
"ConnectionStrings": {
"Mongo": "mongodb://localhost:27017/xsom",
"Influx": "http://localhost:8086/xsom"
},
"Extensions": {
"MHCC.XSOM.WebService.MDC": {
"Synchronizer": {
"Enabled": true,
"Interval": 5,
"PageSize": 5
}
}
}
}
案例3: 使用—debug参数进入debug模式
在debug模式下,可以发现使用-e进行多条件匹配时并行匹配
➜ Desktop sed --debug -r -e 's#("BinaryBase":.*)windsom(.*)#\1xsom\2#' -e 's#("Mongo":.*)windsom(.*)#\1xsom\2#' -e 's#("Influx":.*)windsom(.*)#\1xsom\2#' appsettings.json
SED PROGRAM:
s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
s/("Mongo":.*)windsom(.*)/\1xsom\2/
s/("Influx":.*)windsom(.*)/\1xsom\2/
INPUT: 'appsettings.json' line 1
PATTERN: {\r
COMMAND: s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
PATTERN: {\r
COMMAND: s/("Mongo":.*)windsom(.*)/\1xsom\2/
PATTERN: {\r
COMMAND: s/("Influx":.*)windsom(.*)/\1xsom\2/
PATTERN: {\r
END-OF-CYCLE:
{
INPUT: 'appsettings.json' line 2
PATTERN: "BinaryBase": "M:\\\\binary\\\\windsom",\r
COMMAND: s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
MATCHED REGEX REGISTERS
' regex[0] = 4-41 '"BinaryBase": "M:\\binary\\windsom",
regex[1] = 4-31 '"BinaryBase": "M:\\binary\\'
' regex[2] = 38-41 '",
PATTERN: "BinaryBase": "M:\\\\binary\\\\xsom",\r
COMMAND: s/("Mongo":.*)windsom(.*)/\1xsom\2/
PATTERN: "BinaryBase": "M:\\\\binary\\\\xsom",\r
COMMAND: s/("Influx":.*)windsom(.*)/\1xsom\2/
PATTERN: "BinaryBase": "M:\\\\binary\\\\xsom",\r
END-OF-CYCLE:
"BinaryBase": "M:\\binary\\xsom",
INPUT: 'appsettings.json' line 3
PATTERN: "ConnectionStrings": {\r
COMMAND: s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
PATTERN: "ConnectionStrings": {\r
COMMAND: s/("Mongo":.*)windsom(.*)/\1xsom\2/
PATTERN: "ConnectionStrings": {\r
COMMAND: s/("Influx":.*)windsom(.*)/\1xsom\2/
PATTERN: "ConnectionStrings": {\r
END-OF-CYCLE:
"ConnectionStrings": {
INPUT: 'appsettings.json' line 4
PATTERN: \t"Mongo": "mongodb://localhost:27017/windsom",\r
COMMAND: s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
PATTERN: \t"Mongo": "mongodb://localhost:27017/windsom",\r
COMMAND: s/("Mongo":.*)windsom(.*)/\1xsom\2/
MATCHED REGEX REGISTERS
' regex[0] = 5-51 '"Mongo": "mongodb://localhost:27017/windsom",
regex[1] = 5-41 '"Mongo": "mongodb://localhost:27017/'
' regex[2] = 48-51 '",
PATTERN: \t"Mongo": "mongodb://localhost:27017/xsom",\r
COMMAND: s/("Influx":.*)windsom(.*)/\1xsom\2/
PATTERN: \t"Mongo": "mongodb://localhost:27017/xsom",\r
END-OF-CYCLE:
"Mongo": "mongodb://localhost:27017/xsom",
INPUT: 'appsettings.json' line 5
PATTERN: \t"Influx": "http://localhost:8086/windsom"\r
COMMAND: s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
PATTERN: \t"Influx": "http://localhost:8086/windsom"\r
COMMAND: s/("Mongo":.*)windsom(.*)/\1xsom\2/
PATTERN: \t"Influx": "http://localhost:8086/windsom"\r
COMMAND: s/("Influx":.*)windsom(.*)/\1xsom\2/
MATCHED REGEX REGISTERS
' regex[0] = 5-47 '"Influx": "http://localhost:8086/windsom"
regex[1] = 5-38 '"Influx": "http://localhost:8086/'
' regex[2] = 45-47 '"
PATTERN: \t"Influx": "http://localhost:8086/xsom"\r
END-OF-CYCLE:
"Influx": "http://localhost:8086/xsom"
INPUT: 'appsettings.json' line 6
PATTERN: },\r
COMMAND: s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
PATTERN: },\r
COMMAND: s/("Mongo":.*)windsom(.*)/\1xsom\2/
PATTERN: },\r
COMMAND: s/("Influx":.*)windsom(.*)/\1xsom\2/
PATTERN: },\r
END-OF-CYCLE:
},
INPUT: 'appsettings.json' line 7
PATTERN: "Extensions": {\r
COMMAND: s/("BinaryBase":.*)windsom(.*)/\1xsom\2/
PATTERN: "Extensions": {\r
COMMAND: s/("Mongo":.*)windsom(.*)/\1xsom\2/
PATTERN: "Extensions": {\r
COMMAND: s/("Influx":.*)windsom(.*)/\1xsom\2/
PATTERN: "Extensions": {\r
END-OF-CYCLE:
"Extensions": {
使用-i进行文本修改
➜ Desktop sed -i -r -e 's#("BinaryBase":.*)windsom(.*)#\1xsom\2#' -e 's#("Mongo":.*)windsom(.*)#\1xsom\2#' -e 's#("Influx":.*)windsom(.*)#\1xsom\2#' appsettings.json
➜ Desktop cat appsettings.json
{
"BinaryBase": "M:\\binary\\xsom",
"ConnectionStrings": {
"Mongo": "mongodb://localhost:27017/xsom",
"Influx": "http://localhost:8086/xsom"
},
"Extensions": {
"MHCC.XSOM.WebService.MDC": {
"Synchronizer": {
"Enabled": true,
"Interval": 5,
"PageSize": 5
}
}
}
}