0

私はシェルスクリプトの初心者です。ここでは、テキストを見つけて、シェルスクリプトを使用してテキストを置き換えようとしています。

私がやろうとしているのは、実際には「:」で区切られた2つの文字列を持つテキストファイルがあることです

このような

lorem:ipsum
dola:meru
etc....

私のスクリプトは、実行中に2つのパラメーターを取ります。スクリプトは、最初のパラメーターが見つかったかどうかを確認し、見つからない場合はテキスト ファイルに追加する必要があります。

最初のパラメーターが見つかった場合は、2 番目のパラメーターを置き換える必要があります。

例えば

テキストファイルにはこのようなデータがあります

lorem:ipsum
dola:meru
caby:cemu

私はこのような2つのパラメータでスクリプトを実行しています

./script.sh lorem meru

したがって、スクリプトを実行すると、ファイル内の最初のパラメーターが見つかった場合、スクリプトは2番目の文字列を置き換える必要があるかどうかを確認する必要があります..

つまり、このようにスクリプトを実行しました

./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
4

3 に答える 3

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
于 2013-10-01T12:49:06.593 に答える
1

これも試すことができます、

入力ファイル: new.txt

lorem:ipsum
dola:meru
caby:cemu

スクリプト ファイル: script.sh

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

あなたが望むようにスクリプトを実行すると、「./script.sh lorum meru」

出力: new.txt、次のように表示されます

lorem:meru
dola:meru
caby:cemu

説明: sed は強力なテキスト処理ツールであり、提供されるオプションを使用して、必要に応じてテキストを操作できます。

コードの簡単な説明、 sed -i > 元のファイルの内容を新しい変更に置き換えるために使用されます ( sed で -i を指定しない場合、元のファイルに影響を与えずに変更された内容を出力するだけです)

「s/old:.*/old:new/」

「s」は置換に使用されます。構文は「s/old/new/」です。ここで * は、「:」の後にあるものを指定します。したがって、これを実行すると、目的の出力が得られます。

于 2015-03-12T07:21:08.647 に答える