2017-04-05 232 views
-1

我是一名Linux初學者,我正在嘗試一個項目,它採用file.txt中的每一行,並用每行的第一行代替第三個單詞。這是我的Shell代碼,但它似乎不工作。它一直用$field1取代第三個詞,而不是其中的內容。Linux操作系統

#!/bin/bash 

while IFS=: read -r field1;do  
    sed -e 's/[^:]*[^:]/$field1/3' 
done < file.txt 
+3

您可能想要將問題的標題更改爲som更相關的,如「使用變量與sed不工作」,在這種情況下,你可能會發現這個答案:http://stackoverflow.com/questions/19151954/how-to-use-variables-in-a-command-in -sed – Matthias

+0

您的'sed'命令會消耗'file.txt'的其餘部分,因爲您沒有指定輸入文件。使用'while read'循環或'sed'(在大多數情況下最好使用後者),但不能同時使用,除非它們需要在單獨的流或文件上操作。 – tripleee

+0

感謝您的領導! – TdFn

回答

0

試試這個,這將在同一個文件替換:

#!/bin/sh 

while read -r line 
do 
     first=`echo $line | awk -F':' '{ print $1 }'` 
     last=`echo $line | awk -F':' '{ print $3 }'` 

     echo $line | sed "s/$last/$first/" 

done < file.txt 

輸入文件:

ashish:is:good 
navin:is:good 
how:are:you 

輸出:

ashish:is:ashish 
navin:is:navin 
how:are:how 
+0

如果我這樣做沒有幫助。我必須用第一行代替第三個單詞。那一點只會打印字段。 – TdFn

+0

替換,不換?正確? –

+0

好的,那有效。但最終我必須替換文件中的這些單詞。不只是在屏幕上打印它們。 – TdFn

0

記下單引號。廣場周圍的FIELD1變量等:

sed -e 's/[^:]*[^:]/'$field1'/3' 
+0

沒有。我不知道爲什麼,但它只是複製了這些字段。甚至沒有取代任何東西 – TdFn