Chinaunix

标题: sed 处理出错 [打印本页]

作者: mfkwwgi    时间: 2009-12-19 22:21
标题: sed 处理出错
sed   "`expr $(cat temp | wc -l) - 1`,$d"  ./temp(目的:用sed删除temp的行数减1 的所有行
提示:sed: -e expression #1, char 2: unexpected `,'


怎么回事呢?

谢谢

[ 本帖最后由 mfkwwgi 于 2009-12-19 22:23 编辑 ]
作者: Celinde    时间: 2009-12-19 22:47
  1. sed   "`expr $(cat temp | wc -l) - 1`,\$d"  ./temp
复制代码


用双引号的话$需要转义......
作者: mfkwwgi    时间: 2009-12-19 22:57
sed   "`expr $(cat temp | wc -l) - 1`,\$d"  ./temp


里面我用了反单引号,

请问我该怎样去转义??谢谢
作者: Celinde    时间: 2009-12-19 22:59
啊? - - 上面那个我已经改过了啊,$前面加一个\ 就可以了,我这里测试没问题

因为你表达式外面用的是双引号嘛,里面的$d也会被当作变量来替换..所以要把$转义掉
作者: mfkwwgi    时间: 2009-12-19 23:06
哦。不好意思。

我不仔细。

呵呵。

谢谢。
作者: mfkwwgi    时间: 2009-12-19 23:08
我没有看不仔细。

我理解成第一个$符了。
作者: Celinde    时间: 2009-12-19 23:19
这LZ好可耐,啵一下
作者: mfkwwgi    时间: 2009-12-20 12:15


呵呵。真不懂。就要问。呵呵

sed "$d" temp

怎么不报错?

谢谢
作者: Celinde    时间: 2009-12-20 23:47
其实很简单,先看个例子,


  1. 23:42:03 >d='s/apple/boy/g'
  2. 23:42:07 >echo apple >file
  3. 23:42:10 >cat file
  4. apple
  5. 23:42:11 >sed "$d" file
  6. boy
  7. 23:42:17 >

复制代码


双引号只转义部分元字符..$d被shell当作变量替换了

推荐看下"shell历险之——引用的迷途"
作者: mfkwwgi    时间: 2009-12-21 13:22
谢谢.明白了.

sed '3,$d' temp
sed "3,\$d" temp

执行结果都是一样的.
作者: kns1024wh    时间: 2009-12-22 22:25
标题: 回复 #1 mfkwwgi 的帖子
转移字符要区分开




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