2013-10-01 165 views
0

我是一個shell腳本的新手機,在這裏我試圖找到文本並使用shell腳本替換文本。如何查找和替換shell腳本中的文本

什麼,我試圖做的是,其實我已經有2個字符串分隔的文本文件「: 」

喜歡這個

lorem:ipsum 
dola:meru 
etc.... 

我的腳本運行時,將採取2個參數。 現在腳本應該檢查是否找到第一個參數,如果沒有找到它應該將其添加到文本文件。

如果找到第一個參數,那麼它應該替換第二個參數。

例如

文本文件有這樣的

lorem:ipsum 
dola:meru 
caby:cemu 

數據我運行我的腳本有兩個參數是這樣

./script.sh lorem meru 

所以,當我運行該腳本,它應該檢查如果找到文件中的第一個參數,如果找到,腳本應該替換第二個字符串..

即 我跑這樣

./script.sh lorem meru 

腳本,以便在文件

lorem:ipsum 
dola:meru 
caby:cemu 

運行該腳本後,在該行

lorem:ipsum 

應該得到更換,

lorem:meru 

這是我曾嘗試..

#!/bin/sh 
# 
FILE_PATH=/home/script 
FILE_NAME=$FILE_PATH/new.txt 

echo $1 
echo $2 
if [] then  
else 
echo $1:$2 >> $FILE_NAME 
fi 

回答

1

嘗試這條線在腳本:

awk -F: -v OFS=":" -v s="$1" -v r="$2" '$1==s{$2=r}7' file > newFile 
2

使用sed可能比較簡單。

$ cat inputfile 
lorem:ipsum 
dola:meru 
caby:cemu 
$ pattern="lorem" 
$ word="meru" 
$ sed "/^$pattern:/ s/:.*/:$word/" inputfile 
lorem:meru 
dola:meru 
caby:cemu 
1

你可以試試這個爲好,

輸入文件:new.txt

lorem:ipsum 
dola:meru 
caby:cemu 

腳本文件:腳本。 sh

#!/bin/sh 
sed -i "s/$1:.*/$1:$2/" new.txt 

如果您運行腳本,因爲您希望「./script.sh lorum meru」

輸出:新。TXT,將顯示爲

lorem:meru 
dola:meru 
caby:cemu 

說明: sed的是一個強大的文本處理工具,在這裏,你想用它提供的選項ü可以操縱的文本。

代碼的簡單說明, SED -i>用於替換爲新的變化的原始文件的內容(如果u不要在sed將只打印修改的內容給-i不影響原文件)

「S /舊:* /舊:新/」

用於替代 「S」。語法是「s/old/new /'。 這裏*指定在」:「之後出現的任何內容。 因此,通過執行此操作,您將獲得所需的輸出