+ -
当前位置:首页 → 问答吧 → 几个小问题,请帮忙解答一下!

几个小问题,请帮忙解答一下!

时间:2011-09-10

来源:互联网

本帖最后由 gogo11 于 2011-9-10 15:27 编辑

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\)”这儿怎么用“/”转义?
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 "$A"结果不一样?

另:发觉正则表达式还是没有学好。刚才看了adblock plus的正则表达式,没看明白,^_^

作者: gogo11   发布时间: 2011-09-10

本帖最后由 age 于 2011-9-10 16:26 编辑
2.1、正则表达式和shell一样是用“\”表示转义吗?比如“\(love\)”这儿怎么用“/”转义?
的确是\,虽然分隔符有多种选择,不过转义符好像就那一个吧,不知道为什么用/
2.2、这儿的/1和/2之类的是以什么作为定界符的是“()”吗?看起来怎么好像一个“()”表示为一个?
前面()里内容的引用,从\1到\9按顺序
不过这里的例子给得太不好了,转义符,分隔符,引用等等都用的/, 混为一谈。先不说语法是否正确,单单看起来就让人眼晕。
此时正确的作法是合理选择分隔符,比如可以用@作分隔符,这样表达式里出现的/就一目了然了
3、下边的不知道是什么东西?也就是看不懂!
这个就是我上面所说的分隔符选择,因为表达式里出现了/, 因而就不能再用默认的/作分隔,否则转义来转义去的很容易出错
  1. (echo a;echo x;echo y) | sed '/x$/ {
  2.        N
  3.        s:x/n:x:
  4.        }'
复制代码
这是sed多行语句匹配模式,N表示读入下一行,这样就可以读到换行符,而单行匹配中,换行符意义本行结束。
:是分隔符,/n估计是匹配换行符的。这几句命令的意思是把x/n替换为x,
原句输出
  1. a
  2. x
  3. y
复制代码
现在则是
  1. a
  2. xy
复制代码
另一句与之类似
  1.   (echo a;echo x;echo y) | sed 's:x:X/:'
复制代码
输出应该是
  1. a
  2. X/
  3. y
复制代码
4、A=`ls`
    为什么echo $A和echo "$A"结果不一样?
这个问题以前和yanyongkg讨论过, 最后认为是""保留了\n作用, 即ls输出里实际上应该是带有\n
可以做个对比实验, 如b="1 2 3 4"
无论是echo $b还是echo "$b"
输出都是
1 2 3 4

作者: age   发布时间: 2011-09-10

谢谢age!

作者: gogo11   发布时间: 2011-09-10