sed +在每个数字前添加char


1

我想在每个数字前添加一个“/”,使用sed

    echo 1 2 3 4 5 6 7  | sed 's/[ ^]*/&\//g'

    /1 /2 /3 /4 /5 /6 /7/

当我使用这种语法时,为什么在7之后得到“/”?如何修复我的sed语法才能得到这个:

    /1 /2 /3 /4 /5 /6 /7

Answers:



2

解决它:在数字开头之前加上斜杠(我使用:单独的模式替换而不是代替/,不需要转义斜杠)

 % echo 1 2 3 4 5 6 7 | sed 's:\([1-9]\+\):/\1:g'

你的命令的问题是,你使用它*来匹配任何一个space或一个carret ^。而不仅仅是其中一个,而是其中任意一个,包括0.匹配在行尾(在7之后)(幸运的是你也在开头)。

要使用任何一个单词(也称为非空格)进行此操作,请使用:

 % echo ha hu 1 2 ho | sed 's:[^ ]\+:/&:g'

我得到/
1/2/3/4/5/6/71

你得到1,因为我在最后7个中添加了1,为你提供了一个适用于任何整数的模式,而不仅仅是单个数字。
akira

但我不想1后7
耶尔

任何方式这是数字的例子可能是单词和你的sed适合数字
yael 2011年

然后a)在你的问题中更具体,b)用纯粹的想象力将“71”替换为“7”。
akira
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.