如果我寫一個bash腳本做了一堆文件,我想改變線的就地編輯是一樣的東西:猛砸文件量備用
#include <foo/bar.h>
到
#include "bar.h"
語法是什麼?
old='#include <foo/bar.h>'
new='#include "bar.h'
perl -pe -i.bak 's/$old/$new/g' baz.h
如果我寫一個bash腳本做了一堆文件,我想改變線的就地編輯是一樣的東西:猛砸文件量備用
#include <foo/bar.h>
到
#include "bar.h"
語法是什麼?
old='#include <foo/bar.h>'
new='#include "bar.h'
perl -pe -i.bak 's/$old/$new/g' baz.h
如果所有的文件都在同一目錄中,這應該工作:
sed -e '[email protected]#include <foo/bar.h>@#include "bar.h"@' -i *.c
猛砸
for file in *.c
do
while read -r line
do
case "$line" in
*"$old"*) line="${line/$old/$new}"
esac
echo "$line"
done < "$file" > tempo && mv tempo "$file"
done
你想這樣做在bash,或者在Perl?你的問題說bash,但你的例子說perl。 – Flimzy
它是一個更大的bash文件的一部分,它抓取多個文件中的位並改變它們。我的問題是這一個perl行,應該preform一個就地編輯文件baz.h我想我需要一些轉義字符或在新舊 – Newbie
是的,你會有一些逃避問題,因爲你的$舊包含'/'字符。如果您使用其他字符作爲您的正則表達式終止符,那麼這將工作......也許是@ ... @ ... @',正如我在以下答案中所用的那樣。 – Flimzy