使用sed(或awk)replace每行上的前两个斜线

我有一个文本文件,从Asterisk数据库保存,看起来像这样:

/general/astbin : /asterisk/bin /general/astlang : /var/lib/asterisk/sounds/za /general/cdrdays : 7 /general/cellc1 : _084[02-9]XXXXXX /general/cellc2 : _0841. 

我只想剥去每一行的前两个斜杠,并用空格replace,但可以算出来。 做sed -i 's/\// /g'会删除所有不需要的正斜杠。

任何人有一些想法?

快速把戏:

 sed -i -e 's|/| |' -e 's|/| |' inputfile 

下面你有解决方案一气呵成,而不是其他解决方案(*):

 sed -i 's,/\([^/]*\)/, \1 ,' file 

(*)除了Thaddee Tyl的一个,在我的之前发送,但不幸的是最初不工作。

为什么最好一口气做呢?

因为它更健全,更高效。

这是一些有缺陷的比喻。 如果你在图书馆找到两本书,你没有找到第一本书,从图书馆出来,再进来找第二本忘记以前的书。

“证明”

 # use tmpfs to conduct test in memory, avoiding disk I/O overhead $ mkdir stupid-sed-speed-test $ sudo mount -t tmpfs tmpfs stupid-sed-speed-test/ -o size=1050M $ cd stupid-sed-speed-test/ # create 512 MB + "//\n" at the end $ awk 'BEGIN{printf"%*s",512*1024**2,"";print"//";exit}' >file # "forgetting" solution $ time sed -e 's|/| |' -e 's|/| |' file >/dev/null real 0m4.817s user 0m3.388s sys 0m1.424s $ time sed -i -e 's|/| |' -e 's|/| |' file real 0m5.450s user 0m3.360s sys 0m2.076s # recreate 512 MB + "//\n" at the end $ awk 'BEGIN{printf"%*s",512*1024**2,"";print"//";exit}' >file # "one go" solution $ time sed 's,/\([^/]*\)/, \1 ,' file >/dev/null real 0m3.548s user 0m2.080s sys 0m1.464s $ time sed -i 's,/\([^/]*\)/, \1 ,' file real 0m4.155s user 0m2.068s sys 0m2.080s 

(我的硬件规格为那些好奇他们: 桌面 )

差异当然不是令人兴奋的,但25%有时是很多的。

这应该工作:

 sed -e 's/\// /' -e 's/\// /' 

这应该工作:

 sed -i 's/^\/\([^\/]*\)\/ /\1 /'