关于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。

参考技术A sed 's/117.112.3.8/192.168.0.1/g' filename追问

问题都没看清楚……前后写颠倒了……
而且原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*

追问

正则表达式不懂- - 能稍微给我解释一下吗?虽然分不多,谢谢了

参考技术B

linux命令之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的主要内容,如果未能解决你的问题,请参考以下文章

如何用sed命令替换一行中的某个字符串

如何在Unix下使用sed命令

Linux Sed命令在特殊字符后替换

linux 特殊符号怎样用sed替换

sed 变量替换和Linux的特殊符号大全

Linux:使用sed命令替换时,如何写入Tab符号呢