几个小问题,请帮忙解答一下!
时间:2011-09-10
来源:互联网
本帖最后由 gogo11 于 2011-9-10 15:27 编辑
1、记着很久很久以前,我见过的一个命令(现在忘了)。达成的效果是这样的,比如你输入“忘记的命令 fuck”(应该还有一个字母参数),他会用给出字母组合成的一个fuck这样的大的单词。谁知道这个命令,请告知,谢谢!刚才论坛上想用这个命令组合,结果不记得这个了。
重新看sed命令详解
2、下边的不理解:
2.2、这儿的/1和/2之类的是以什么作为定界符的是“()”吗?看起来怎么好像一个“()”表示为一个?
3、下边的不知道是什么东西?也就是看不懂!
为什么echo $A和echo "$A"结果不一样?
另:发觉正则表达式还是没有学好。刚才看了adblock plus的正则表达式,没看明白,^_^
1、记着很久很久以前,我见过的一个命令(现在忘了)。达成的效果是这样的,比如你输入“忘记的命令 fuck”(应该还有一个字母参数),他会用给出字母组合成的一个fuck这样的大的单词。谁知道这个命令,请告知,谢谢!刚才论坛上想用这个命令组合,结果不记得这个了。
重新看sed命令详解
2、下边的不理解:
1.3 用 /1, /2, ..., /9 来表示匹配的字符串
e.g. sed 's//([a-z]*/)[0-9]*//1/' <old >new
本例中 /1 就是指前面的 /([a-z]*/)
sed 's//([a-z]*/) /([0-9]*/)//2 /1/' <old >new
本例中 /2 和 /1 分别代表前面的 /([0-9]*/) 和 /([a-z]*/)
/1, /2, ..., /9 也可以出现在搜索字符串中
e.g. sed 's//([a-z]*/) /1//1/' <old >new
本例可以去除重复的由字母组成的词
2.1、正则表达式和shell一样是用“\”表示转义吗?比如“\(love\)”这儿怎么用“/”转义?e.g. sed 's//([a-z]*/)[0-9]*//1/' <old >new
本例中 /1 就是指前面的 /([a-z]*/)
sed 's//([a-z]*/) /([0-9]*/)//2 /1/' <old >new
本例中 /2 和 /1 分别代表前面的 /([0-9]*/) 和 /([a-z]*/)
/1, /2, ..., /9 也可以出现在搜索字符串中
e.g. sed 's//([a-z]*/) /1//1/' <old >new
本例可以去除重复的由字母组成的词
2.2、这儿的/1和/2之类的是以什么作为定界符的是“()”吗?看起来怎么好像一个“()”表示为一个?
3、下边的不知道是什么东西?也就是看不懂!
1.5 替换和插入换行符号
替换 (echo a;echo x;echo y) | sed '/x$/ {
N
s:x/n:x:
}'
插入
(echo a;echo x;echo y) | sed 's:x:X/
:'
4、A=`ls`替换 (echo a;echo x;echo y) | sed '/x$/ {
N
s:x/n:x:
}'
插入
(echo a;echo x;echo y) | sed 's:x:X/
:'
为什么echo $A和echo "$A"结果不一样?
另:发觉正则表达式还是没有学好。刚才看了adblock plus的正则表达式,没看明白,^_^
作者: gogo11 发布时间: 2011-09-10
本帖最后由 age 于 2011-9-10 16:26 编辑
不过这里的例子给得太不好了,转义符,分隔符,引用等等都用的/, 混为一谈。先不说语法是否正确,单单看起来就让人眼晕。
此时正确的作法是合理选择分隔符,比如可以用@作分隔符,这样表达式里出现的/就一目了然了
复制代码
这是sed多行语句匹配模式,N表示读入下一行,这样就可以读到换行符,而单行匹配中,换行符意义本行结束。
:是分隔符,/n估计是匹配换行符的。这几句命令的意思是把x/n替换为x,
原句输出
复制代码
现在则是
复制代码
另一句与之类似
复制代码
输出应该是
复制代码
可以做个对比实验, 如b="1 2 3 4"
无论是echo $b还是echo "$b"
输出都是
1 2 3 4
2.1、正则表达式和shell一样是用“\”表示转义吗?比如“\(love\)”这儿怎么用“/”转义?
的确是\,虽然分隔符有多种选择,不过转义符好像就那一个吧,不知道为什么用/
2.2、这儿的/1和/2之类的是以什么作为定界符的是“()”吗?看起来怎么好像一个“()”表示为一个?
前面()里内容的引用,从\1到\9按顺序不过这里的例子给得太不好了,转义符,分隔符,引用等等都用的/, 混为一谈。先不说语法是否正确,单单看起来就让人眼晕。
此时正确的作法是合理选择分隔符,比如可以用@作分隔符,这样表达式里出现的/就一目了然了
3、下边的不知道是什么东西?也就是看不懂!
这个就是我上面所说的分隔符选择,因为表达式里出现了/, 因而就不能再用默认的/作分隔,否则转义来转义去的很容易出错
- (echo a;echo x;echo y) | sed '/x$/ {
- N
- s:x/n:x:
- }'
:是分隔符,/n估计是匹配换行符的。这几句命令的意思是把x/n替换为x,
原句输出
- a
- x
- y
- a
- xy
- (echo a;echo x;echo y) | sed 's:x:X/:'
- a
- X/
- y
4、A=`ls`
为什么echo $A和echo "$A"结果不一样?
这个问题以前和yanyongkg讨论过, 最后认为是""保留了\n作用, 即ls输出里实际上应该是带有\n为什么echo $A和echo "$A"结果不一样?
可以做个对比实验, 如b="1 2 3 4"
无论是echo $b还是echo "$b"
输出都是
1 2 3 4
作者: age 发布时间: 2011-09-10
谢谢age!
作者: gogo11 发布时间: 2011-09-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28