2017-02-14 30 views
0

たとえば、txtファイルの特定の行をシェルスクリプトで置き換えようとしています。テキストファイルの特定の行をシェルスクリプトで置き換えるにはどうすればよいですか?

cat aa.txt: 
auditd=0 
bladeServerSlot=0 

スクリプトを実行すると、次のように「bladeServerSlot」を12に変更したいと思います。

cat aa.txt: 
auditd=0 
bladeServerSlot=12 

お願いします。 sedとバックリファレンスを使用して

+0

例: 'perl -ne '$ _ =〜s/bladeServerSlot \ = 0/bladeServerSlot \ = 12 /; print $ _; ' aa.txt' – AbhiNickz

+1

これは 'perl -pe 's/bladeServerSlot = 0/bladeServerSlot = 12 /'aa.txt'で書いたほうがはるかに良いでしょう。 – Sobrique

答えて

0

sed -r '/bladeServerSlot/ s/(^.*)(=.*)/\1=12/g' inputfile 

awkを使用して、これはbladeServerSlotを含む行を検索し、その行の2番目の列に置き換えられます。

awk 'BEGIN{FS=OFS="="}/bladeServerSlot/{$2=12}1' inputfile 
+0

ありがとうございます! –

+0

downvoteの理由を説明する人は、誰でもダウンビートしてください。 –

+0

sedのように思えますが、 '/^bladeServerSlot/s /=.*$/= 12 /' –

-1

例の行を置き換えることは本当に必要ですか? bladeServerSlotは変数であるため、値をリセットすることができます。

bladeServerSlot=`any command` 

または、この変数をこのスクリプトに提供されたパラメータで埋めることができます。

bladeServerSlot=$1 

$1は、スクリプトの最初のパラメータです。私はこれがここでファンキーな正規表現を行うよりもあなたの問題を解決するよりクリーンな方法だろうと思う。 sed/perlの解決策はうまくいくが、あなたのスクリプトを読んでいる人にはあまり明確ではない。

+0

というようにもっと細かいことがあります。 –

2
perl -pe 's/bladeServerSlot=\K\d+/12/' aa.txt > output.txt 

\Kは、以前のすべての試合を破棄positive lookbehindparticular formあります。だから私たちは次のものだけを置き換える必要があります。 s/は、デフォルトで現在の行を含む$_に適用されます。 -pは、すべての行に$_を印刷するので、他のすべての行がコピーされます。出力をファイルにリダイレクトします。

関連する問題