关于linux的sed用法。如何替换特殊字符,如IP=192.168.0.1替换成IP=117.112.3.8
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于linux的sed用法。如何替换特殊字符,如IP=192.168.0.1替换成IP=117.112.3.8相关的知识,希望对你有一定的参考价值。
sed 's/\(IP=\).*/\1117.112.3.8/g'. 任意字符
* 任意次数
\1 输出第一保存
\(\) 第一保存范围追问
谢谢,117的前面应该有个空格吧?^_^
追答不需要空格哈,你多加个空格,输出也会多出来个空格。
其实最好应该是 sed 's/\(IP=\)[0-9.]*/\1117.112.3.8/g' 最好用正则来取IP。
意思是把“IP=”后面开始,到匹配第一个非[数字]或者[.]的字符串,替换成你的新IP。
正则就是像楼上的那样取吗?看起来晕呼呼的啊- -
追答正则想写复杂点就写复杂点,想简单就简单。比如说IP,你可以规定正则匹配字符1-9和点(我的就是这个意思),也可以像楼上样规定更精确的匹配,看你自己需求。
比如你有字符串 IP=555.888.224.999 用我写的就可以匹配到,用楼上哥们的就匹配不到,因为555.888.224.999 其实不是个IP,IP最大就255.255.255.255。
问题都没看清楚……前后写颠倒了……
而且原IP的值不是确定的,不一定是192.168.0.1,我想模糊匹配 替换
哦,是颠倒了,你没说清楚要模糊匹配啊?你想怎么匹配?总得有个RE吧
追问就是IP后面的ip参数值我是不知道的,就想用一个具体的来替换
用sed -i 's/IP=*.*/IP=117.112.3.8/' filename 是可以了
但是遇到其他一些参数的配置就没办法了,比如NUM=2046-13,怎么改NUM的值呢
那就用正则表达式呗 IP= '/^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)((d|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)2([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$/' #匹配ip地址
或者IP=^([1-9]\d*\[1-9]\d*
正则表达式不懂- - 能稍微给我解释一下吗?虽然分不多,谢谢了
参考技术Blinux命令之sed
sed命令格式
sed [options] ‘command‘ file(s)
替换:s命令
sed ‘s/原字符串/替换字符串/‘
末尾的“g”代表替换全部,否则只替换每行的第一个:
# 替换所有匹配关键字 sed ‘s/原字符串/替换字符串/g‘
“-i”参数:直接修改并保存
sed -i ‘s/原字符串/替换字符串/g‘ filename
对文件做备份:
sed -i ‘.bak‘ ‘s/原字符串/替换字符串/g‘ filename
例:source Insight中经常遇到很多Tab符换成4个空格,就可以使用此命令批量替换。
sed -i ‘s/\t/ /g‘ *.c //将所有.c文件中的Tab符替换为4个空格 sed -i ‘s/\t/ /g‘ *.h //将所有.h文件中的Tab符替换为4个空格
以上是关于关于linux的sed用法。如何替换特殊字符,如IP=192.168.0.1替换成IP=117.112.3.8的主要内容,如果未能解决你的问题,请参考以下文章