2010-05-10 35 views
3

bash-hackers wiki's recommendation之後,我想使用ed編輯文件。使用ed來操縱查找匹配的文件

我特別想做的ED以下而不使用sed:

find . -type f -exec sed -i -e 's/a/b/g' {} \; 

我看到ED並沒有選擇像sed的-e,從而據我所知,管道和IO重定向是以非交互方式使用它的唯一方法。

因此,使用編輯從bash腳本做同上sed的命令如下所示:

ed file_name <<<$'g/a/s//b/g\nw' 

或者

echo $'g/a/s//b/g\nw' | ed file_name 

但據我所知,這是不可能的涉及find的-exec內的管道或io重定向。

我想念什麼?或者是克服這個問題的唯一方法是使用循環?

for file in $(find . -type f -print); do ed $file <<<$'g/a/s//b/g\nw'; done; 

回答

4
find . -type f -exec bash -c 'ed -s "$2" <<< "$1"' _ $'g/a/s//b/g\nw' {} \; 

而且一個POSIX版本:

find . -type f -exec sh -c 'printf "%s\n" "g/a/s//b/g" w | ed -s "$1"' _ {} \; 

的主要原因使用ED在SED -i是ED編輯文件,而SED -i覆蓋文件,如果你碰巧有這是一個問題你不想破壞的鏈接。

0

將帶有所有重定向和「here文件」的ed命令放在shell腳本中,並從查找中調用該命令。我不得不問:爲什麼要編輯?你認爲你可以用ed做什麼,你無法使用sed?

+0

查看我剛纔提到的鏈接,以及geirha的回答。 – theosp 2010-05-11 00:01:06