0
我的最終目標是使用sed
來自動轉換Makefile。現在,我試圖讓sed
將所有出現的<string>.o
更改爲c_<string>.o
,其中string
可能包含字符,數字和下劃線。下面的命令(包含在需要兩個文件名作爲參數的腳本)做這項工作的一部分:sed替換命令:不明白的行爲
sed -E 's/([a-z,A-Z,0-9_]*.o)/c_\1/g' <$1 >$2
與內容
bye.o
bye1.o
bye_again.o
mycode
-o
%.o
我得到的文件操作
c_bye.o
c_bye1.o
c_bye_again.o
c_mycode
c_-o
%c_.o
但當然最後三行是不正確的。我需要它們保持原樣(以便我的目標名稱保持不變並且Makefile仍然有效)。
我的問題是:
- 我怎樣才能改變上面給出的
sed
命令,這樣的置換爲唯一積極的,如果<string>
包含至少一個性質,並含有%
任何字符串被排除在外? - 爲什麼
sed
命令在上面給出的mycode
改變時不包含擴展名.o
?
編輯: realspiritual的答案適用於我上面給出的示例文件很大,但是當我嘗試對我的實際Makefile中sed
命令,我碰上與依賴部分的問題(我知道這由C編譯器自動生成,但我需要手動指定依賴關係)。在那裏,我得到了下面的例子:
hello.o: file1.o file2.o\
file3.o
輸出:
c_hello.o:c_ file1.oc_ file2.o\
c_ file3.o
,而我需要的是:
c_hello.o: c_file1.o c_file2.o\
c_file3.o
這對於簡單的例子很好,但與實際的Makefile我遇到了一個問題,我在編輯的問題中描述。我不清楚我需要在你的'sed'命令中編輯它以使它在那裏工作。 – user1362373