2014-05-05 49 views
-3

目前我想在我的機器上安裝GCC-4.1.2版:Fedora 20理解「sed的」命令

在該指令中,前三個命令涉及使用「sed的」命令,對Makefile文件的修改。但是,我很難正確使用這些命令來處理我的情況。 GCC-4.1.2的網站link

的命令是:

sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in && 
sed -i '[email protected]\./fixinc\[email protected] [email protected]' gcc/Makefile.in && 
sed -i 's/@[email protected]/yes/' gcc/gccbug.in && 

我想通過閱讀「sed的」手冊,以瞭解他們,但它也不是那麼容易做到。任何幫助/提示將不勝感激!

+1

你沒有指定爲什麼要安裝舊版本的'gcc',以及爲什麼你期望'linuxfromscratch.org'是一個在Fedora上安裝它的好源碼。另一方面,你沒有具體說明你想用'sed'實現的目標和原因。 –

+0

@ pavel Simerda:我正在嘗試安裝gcc-4.1.2,因爲我試圖運行一個在新版本中運行失敗的程序。我選擇了提供的網站,因爲那是我能找到的唯一鏈接。 (如果你知道一個好的源代碼,請分享)如果我知道'sed'命令是用來實現的,我不會在這裏提出一個問題:然而,我沒有共享列出的信息,因爲它不是直接的與我的問題有關。 – ElectroJunkie

+0

修復程序以使用當前的'gcc'編譯會不會更好?這些變化通常不會那麼致命,對我來說,這比使用舊版本的編譯器更安全。通過這種方式,您可以創建一個定期的Fedora 20包,然後比手動構建更方便。但是如果你需要幫助,那麼開始一個新問題可能會更好。 –

回答

6

一,殼體部分:&&。這只是將命令一起鏈接起來,因此每個後續行只有在前一行成功運行時纔會運行。

sed -i表示「在文件上內嵌運行這些命令」,即直接修改文件而不是將更改的內容打印到標準輸出。這裏的每個sed命令(字符串)是替代命令,我們可以看出,因爲該命令以s開頭。

替補查找文件中的一段文字,然後替換它。所以訂單總是s/needle/replacement/。看看第一行和最後一行如何具有相同的正斜槓?這是命令(替代),在乾草堆(install_to_$(INSTALL_DEST)中找到的針和要替換它的文本()之間的傳統分隔符。

因此,第一個查找字符串,並且刪除了它(空替換)。最後一個查找@[email protected]並用yes代替它。

中間的一個有點奇怪。看看它如何開始[email protected]而不是s/?那麼,sed將允許您使用任何你喜歡的分隔符將針頭與替換件分開。由於該針頭中有一個/\./fixinc\.sh),因此使用與/不同的分隔符是有意義的。它將用-c true替換文字./fixinc.sh

最後說明:爲什麼第二針有\.而不是.?那麼,在正則表達式像針是(但在你的例子中不使用),一些字符是神奇和做神奇仙塵操作。其中一個神奇字符是.。爲了避免這個魔法,我們在它前面放了一個\,遠離魔法。 (這個魔法是「匹配任何字符」,並且我們需要一個字面的時間段,這就是爲什麼。)

+0

@ heptadecagram:非常感謝您的迴應。你提供了我正在尋找的確切答案,特別是關於'靈活的分隔符'。 – ElectroJunkie