2013-04-22 262 views
1

我想找到一个解决方案,以在一个字符串添加一些字符BASH:插入文本在特定位置

folder/dir/directory/file.txt 
shares/page.html 
etc/downloads/torrent.torrent 

应该成为

.folder.old/dir/directory/file.txt 
.shares.old/page.html 
.etc.old/downloads/torrent.torrent 

我该怎么办那? 'grep'将是一个正确的选择?

谢谢

+0

'sed'是你想为这个问题的命令,不'grep'。 – imp25 2013-04-22 14:35:08

回答

4

使用sed,而不是grep

sed -i.bak 's#^\([^/]*\)#.\1.old#' 

注意-i将结果保存在原始文件本身。 -i.bak将保存您的原始文件与.bak扩展万一出现问题。

+1

那真是太神奇了! – user2302636 2013-04-22 14:40:40

+1

它可以在目录上工作吗? – user2302636 2013-04-22 14:49:56

+0

你可以在一组文件上使用它:'sed -i.bak's#^ \([^ /] * \)#。\ 1.old#'* .txt' – anubhava 2013-04-22 14:52:10

4

grep只搜索,它不会做替换。你想sed

sed -i.bak 's#^\([^/]*\)#.\1.old#' 

^表示线路
\(...\)的开端是成功捕获括号,它匹配模式的更换变得\1
[^/]匹配任何不是/
*是零个或多个前面的

+0

谢谢你的完整解释 – user2302636 2013-04-22 14:41:28