1、记着很久很久以前,我见过的一个命令(现在忘了)。达成的效果是这样的,比如你输入“忘记的命令 fuck”(应该还有一个字母参数),他会用给出字母组合成的一个fuck这样的大的单词。谁知道这个命令,请告知,谢谢!刚才论坛上想用这个命令组合,结果不记得这个了。
重新看sed命令详解
2、下边的不理解:
引用:
1.3 用 /1, /2, ..., /9 来表示匹配的字符串
e.g. sed 's//([a-z]*/)[0-9]*//1/'new
本例中 /1 就是指前面的 /([a-z]*/)
sed 's//([a-z]*/) /([0-9]*/)//2 /1/'new
本例中 /2 和 /1 分别代表前面的 /([0-9]*/) 和 /([a-z]*/)
/1, /2, ..., /9 也可以出现在搜索字符串中
e.g. sed 's//([a-z]*/) /1//1/'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的正则表达式,没看明白,^_^
liaoding2008 于 2011-09-19 18:02:04发表:
路过灌水
gogo11 于 2011-09-10 18:12:33发表:
谢谢age!
age 于 2011-09-10 16:19:06发表:
[i=s] 本帖最后由 age 于 2011-9-10 16:26 编辑 [/i]
的确是\,虽然分隔符有多种选择,不过转义符好像就那一个吧,不知道为什么用/
前面()里内容的引用,从\1到\9按顺序
不过这里的例子给得太不好了,转义符,分隔符,引用等等都用的/, 混为一谈。先不说语法是否正确,单单看起来就让人眼晕。
此时正确的作法是合理选择分隔符,比如可以用@作分隔符,这样表达式里出现的/就一目了然了
这个就是我上面所说的分隔符选择,因为表达式里出现了/, 因而就不能再用默认的/作分隔,否则转义来转义去的很容易出错[code](echo a;echo x;echo y) | sed '/x$/ {
N
s:x/n:x:
}'[/code]这是sed多行语句匹配模式,N表示读入下一行,这样就可以读到换行符,而单行匹配中,换行符意义本行结束。
:是分隔符,/n估计是匹配换行符的。这几句命令的意思是把x/n替换为x,
原句输出[code]a
x
y[/code]现在则是[code]a
xy[/code]另一句与之类似[code] (echo a;echo x;echo y) | sed 's:x:X/:'[/code]输出应该是[code]a
X/
y[/code]
这个问题以前和yanyongkg讨论过, 最后认为是""保留了\n作用, 即ls输出里实际上应该是带有\n
可以做个对比实验, 如b="1 2 3 4"
无论是echo $b还是echo "$b"
输出都是
1 2 3 4