Chinaunix

标题: sed的函数替换问题!!在线等待!!谢谢!!! [打印本页]

作者: 大脚王    时间: 2003-06-05 16:16
标题: sed的函数替换问题!!在线等待!!谢谢!!!
需要往一个文本里面添加数据,使用如下命令

file_name="This is new file."
sed "{$ a\
$file_name
}" $tmp
报告如下:sed: Function {$ a cannot be parsed.
如果不用“"”,使用“'”,则不能引用参数,那么再SED中如果要增加一行,到底该如何处理呢??
顺道问一下,修改后的文件如何保存?是不是非要一个中间文件才可以呢??
作者: woodie    时间: 2003-06-05 16:55
标题: sed的函数替换问题!!在线等待!!谢谢!!!
这里应该用单引号,屏蔽shell中"$"字符的特殊含义。把$原样同其他用单引号括启的脚本一起传递给sed处理。
作者: 大脚王    时间: 2003-06-05 17:18
标题: sed的函数替换问题!!在线等待!!谢谢!!!
能写个例子吗??我还是不太明白??
作者: woodie    时间: 2003-06-05 17:36
标题: sed的函数替换问题!!在线等待!!谢谢!!!
sorry, 没看到你还需要展开变量。那就用"\"加在"$"前面就好了。

  1. sed "{\$ a\
  2. $file_name
  3. }" $tmp
复制代码


美元符号"$"在shell中是有特殊含义的,上面第一个"$"实际上是要传递给sed的,它代表最后一行。为了防止shell自作主张地解释"$"的特殊含义,通常用两种办法,一种就是前面说的用单引号,但是那样"$file_name"就不会被展开为"This is new file." 了,这显然不是我们想要的;另一种就是用反斜杠来屏蔽后面一个字符的特殊含义。
作者: woodie    时间: 2003-06-05 17:58
标题: sed的函数替换问题!!在线等待!!谢谢!!!
如果只是向一文件末尾添加内容,有更加单的方法:   

  1. file_name="This is new file."
  2. echo $file_name >> file-to-be-appended
复制代码

作者: woodie    时间: 2003-06-05 18:06
标题: sed的函数替换问题!!在线等待!!谢谢!!!
原帖由 "大脚王" 发表:
那么再SED中如果要增加一行,到底该如何处理呢??
顺道问一下,修改后的文件如何保存?是不是非要一个中间文件才可以呢??
   

sed的a命令和i命令用在脚本文件中不会出问题,用在命令行可不容易搞定。

中间文件也有个好处啊,出错后不会影响原来的文件。当然文件很大的话,开销也会较大。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2