Chinaunix

标题: sed遇到什么符号要用转义、 [打印本页]

作者: amio555    时间: 2008-06-29 11:26
标题: sed遇到什么符号要用转义、
sed遇到什么符号要用转义 \

我知道的有  [ ] " '   还有什么符号  需要前面加 \
作者: walkerxk    时间: 2008-06-29 12:01
还有s命令后紧跟的分隔符要转换,其他的就不知道了"和'也不一定要转义的,比如:echo 'a"b'|sed 's/"/a/'和echo "a'b"|sed "s/'/a/"
有点郁闷的是,如果用[作为分隔符怎么办?
作者: amio555    时间: 2008-06-29 12:15
sed 's   是不是现在的新版本  不能这么用了   都变成 sed "s   了?
作者: walkerxk    时间: 2008-06-29 12:21
用单引号还是双引号主要看你的习惯,我一般是用单引号的,单引号可以少一些转义。
作者: amio555    时间: 2008-06-29 12:34
我用单引号为什么会 提示

sed: -e expression #1, char 1: unknown command: `''
作者: walkerxk    时间: 2008-06-29 12:45
你用的是echo 'a"b'|sed 's/"/a/'?
作者: amio555    时间: 2008-06-29 12:57
原帖由 walkerxk 于 2008-6-29 12:45 发表
你用的是echo 'a"b'|sed 's/"/a/'?



用批处理  调用的  sed -i 's/"/a/' a.txt

这样不可以吗?
作者: walkerxk    时间: 2008-06-29 13:10
-i不是批处理,只是直接写入文件而已,你的sed是gnu sed?什么版本?
sed --version
GNU sed version 4.1.4
作者: walkerxk    时间: 2008-06-29 13:14
支持-i参数的话应该是gnu sed啊。
你改成sed -i 's/\"/a/' a.txt试试。
还有,在没有确认命令是否成功的时候用sed 's/\"/a/' a.txt|less查看,确认成功再用-i,免得文件被破坏。脚本中尽量少用-i,内存的读取比硬盘快很多。
作者: amio555    时间: 2008-06-29 13:19
C:\Program Files\GnuWin32\uninstall>sed --version
GNU sed version 4.1.5


我就是把  sed -i 's/"/a/' a.txt  这个命令 放在批处理里面   然后a.txt里面的是 "a'b"
作者: amio555    时间: 2008-06-29 13:22
sed -i 's/\"/a/' a.txt  还是刚才的错误

难道是版本问题吗
作者: walkerxk    时间: 2008-06-29 13:25
我是cygwin:
bash-3.2$ cat a
a'b
a'b
a'b
a'b
a'b
bash-3.2$ sed -i 's/"/a/' a
bash-3.2$
而且这个命令应该是没用的,因为文件里面没有"。
作者: walkerxk    时间: 2008-06-29 13:30
我在DOS下也正常。
D:\other\cygwin\home\walkerxk>cat a
a'b
a'b
a'b
a'b
a'b

D:\other\cygwin\home\walkerxk>sed -i 's/"/a/' a

D:\other\cygwin\home\walkerxk>
作者: amio555    时间: 2008-06-29 14:06
你用批处理 试试?
作者: walkerxk    时间: 2008-06-29 14:28
什么批处理?bat?
D:\other\cygwin\home\walkerxk>a.bat

D:\other\cygwin\home\walkerxk>sed -i 's/"/a/' a

D:\other\cygwin\home\walkerxk>
而且我的a.bat和a里面都有\r的,都没事。
作者: amio555    时间: 2008-06-29 18:19
帮忙看下这句什么意思

sed -e  /^^\[.*\]/d
作者: walkerxk    时间: 2008-06-29 18:44
删除^[开头,后面有]的行。
作者: amio555    时间: 2008-06-29 18:48
sed -e /^^$/d

这个?
作者: walkerxk    时间: 2008-06-29 19:08
删除只有^的行,^是开头,$是结尾,建议你去看看十三问:http://bbs.chinaunix.net/thread-218853-1-1.html
和新手导航:http://bbs.chinaunix.net/thread-674903-1-1.html
作者: amio555    时间: 2008-06-29 19:33
帮助看不明白啊

/d  /p   这两个  各是什么意思啊?
作者: walkerxk    时间: 2008-06-29 19:41
d是删除,p是打印,//是查找。一般如果要用p的话你要加上-n参数,因为sed默认打印所有东西。
比如:
sed '/abc/d' 删除含有abc的行
sed '1,2d' 删除第一和第二行
sed -n '1,2p' 打印 第一和第二行
sed -n '/abc/p' 打印含有abc的行
一般我喜欢把sed -n '/abc/p'写成sed '/abc/!d',因为如果有多个sed语句时,可以合并成一句:sed '/abc/d;/def/!d',但是如果里面有一句sed -n的话,会有麻烦。




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