先看一个使用sed 替换的脚本:
#!/bin/bash
#特殊符号解析
#将json中特殊符号替换为空格,删除,或者<>符号,或者添加换行符
sed "s/<\/span> / /g" -i source_json.txt
sed "s/ / /g" -i source_json.txt
sed "s/<\/span><\/span>/ /g" -i source_json.txt
sed "s/<\/span>//g" -i source_json.txt
sed "s/"/\"/g" -i source_json.txt
sed "s/<//g" -i source_json.txt
sed "s/&/\&/g" -i source_json.txt
#换行
#在特定位置添加换行符
sed "s/{\"level\":[0-9]\ ,\"eventtreelabel\"/\n&/g" -i source_json.txt
sed "s/\"level\":[0-9]\ ,\"eventtreelabel\":\"[0-9.]\ \",//g" -i source_json.txt
sed "s/\"linenumber\":[0-9]\ }],/&\n/g" -i source_json.txt
sed "s/\"id\":\"[0-9]\ -[0-9]\ \",//g" -i source_json.txt
#特定字符串的删除
sed -i '/name/d' source_json.txt
#换指定的警告或者报错类型
sed "s/\"tag\":\"[a-z_-]\ \",//g" -i source_json.txt
sed "s/\"[a-za-z]\ ids\":\[\"[0-9-]\ \",\"[0-9-]\ \"\],//g" -i source_json.txt
sed指令的替换
转义字符 \
需要转义的字符 ' " $ ^ \ [ ] 等,转义字符 \ 如果需要转义,前面需要添加 \
正则表达式:
参数
-i 参数: -i 参数放在表达式前面,或者表达式后面都行,均能对文本操作
$sed "s/zhangsan/lisi/g" source_json.txt #没有参数 i 仅仅改变显示
$sed "s/zhangsan/lisi/g" -i source_json.txt #使用参数 i 会实际改变文本
$sed "s/<//g" -i source_json.txt #将匹配到的 > 替换为 >
&参数:
这个参数是指的是:前面已经匹配到字符串
# & 代表的就是 "s/&/" 这里匹配到的 &
$sed "s/&/\&/g" -i source_json.txt
这条指令的意思就是在 & 这个特定字符前面添加一个 \ 字符
#在匹配到的 {"level":[0-9]\ ,"eventtreelabel" 去掉了转义字符 \ 在匹配的字符串前面添加换行
$sed "s/{\"level\":[0-9]\ ,\"eventtreelabel\"/\n&/g" -i source_json.txt
#在匹配的字符串前面添加换行符
$sed "s/\"linenumber\":[0-9]\ }],/&\n/g" -i source_json.txt
正则表达式使用:
#正则表达式 [a-z_]\ 表示从a-z的全部字符,并且包含下划线 _ 这个集合中的一个或多个,
#全部替换为空格
$sed "s/\"tag\":\"[a-z_-]\ \",//g" -i source_json.txt
# & 是匹配到的字符串的代指,"linenumber":xxx}],
# xxx表示的是多个数字,[0-9]\ 是正则表达式,表示在0-9范围内的一个或者多个数字,
# 最后替换的 &\n 表示在匹配到的字符串后面添加换行
$sed "s/\"linenumber\":[0-9]\ }],/&\n/g" -i source_json.txt
特定字符串删除: (注意这里是单引号,-i参数的位置放在表达式前面,或者后面都可以)
#特定字符串的删除,将特定匹配到的字符串删除
sed -i '/name/d' source_json.txt