执行命令如下时,总报extra characters at the end of command错误:
sed -i "s/192.168.0.2/192.168.0.3/g" *.rptdesign
原因:
unix与linux在执行sed指令时有些区别,-i指令后面多加一个""空白符即可,如
sed -i "" "s/192.168.0.2/192.168.0.3/g" *.rptdesign
附 sed用法:
sed [OPTION] [ACTION] [FILE]
action的部分基本上是这样的:'[n1[,n2]]function',如果想要连续执行多个action的话那么可以用-e参数。就是sed -e 'action1' -e 'action2'这样的形式。也可以直接用分号:sed 'action1;action2'这样的形式。
n1和n2为可选项,可以用数字或者^,$符号,代表某些特定的行(^表示首行,$的话表示最后一行),表示后面的function在指定的这一行或几行之间展开。
而function有以下参数:
a:指append,后接上字符串,意思是在指定行后面新加入一行,内容为a后面跟的字符串。比如sed -i '2 a INSERTTEXT' test.txt就可以在test.txt现在的第二行后面加上一行,内容是"INSERTTEXT"
d:指delete,删除指定一行或多行,注意d参数是跟在行号后面的,比如sed '2,5d' test.txt就是删除了文件中的第2至5行
i:指insert,后接上字符串,和append相对,在指定行的上方加入一个新行
s:指substitute替换,最常用的一个参数,其基本格式是's/old/new/[n]',old是被替换的字符串,new是新替换进的字符串,而n是一个可选项,可以写数字或者g。数字的意思是只替换一行中的第n个old,而g是指替换全部old,如果写了ng就是说替换第n个old之后到行末的所有的old
y:用参数y可以对原文进行字符级别的替换,y的用法和s类似,如'y/OLD/NEW/',相当于把原文中所有的O替换成N,L换成E,D换成W。显然,要求OLD和NEW的长度应该相等,否则sed会报错。
&:表示已经匹配到的字符串,通常用在正则匹配中,比如's/正则表达式/&ok/g'表示把所有匹配正则表达式的字符串后面都加上ok。
/:'/pattern/'的作用就是定位含有pattern的行。它可以替代n1,n2那样死板的指定行的方法。比如sed '/pattern/!i INSERT'就是除了匹配到pattern的行,其余地行在前面一行都插入内容为INSERT的一行新行。
!:写在参数前面否定,比如'/pattern/!d'就是不删除匹配到pattern的行
p:常用在s的最后参数位置,即's/old/new/p'的形式。这么做可以让sed在输出显示的时候只输出被修改过的行。这么做的话需要配上命令的参数-n,最后的命令应该是像
sed -n 's/old/new/p' test.txt这样的形式。