我有一个文本文件,从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 /'