0

vimで作成したシェルスクリプトがあります。私がそれについて知っている唯一の考えはvar名です。

ドキュメントのどこかに次の行があります。

SecondHome='/Users/me/Documents/code/'

これの値は正しくありませんが、シェルスクリプトが行うことを変更せずに新しい機能を実行するシェルスクリプトを介して。

私は次のようなことを考えていました:

grep -n "SecondHome" somefile.sh

これは行番号と一致を吐き出しますが、変数定義であるため、最初の行番号のみを変更します。

次に、その行を次のように置き換えるために、なんらかの方法で置換を行うことを考えていました。

export SecondHome=$DirPath/code/$Repo

次に、変更されたスクリプトファイルを実行します。

#!/bin/zsh
export DirPath=/Users/me/Documents/
export Repo=MyNewRepo/
export LineNumber=$(grep -n "SecondHome" somefile.sh)
#carry out replace on somefile.sh at $LineNumber with: export SecondHome=$DirPath/code/$Repo/
. ./somefile.sh

これは可能ですか?

4

1 に答える 1

2
sed -i.bak '/SecondHome=/s,=.*,=$DirPath/code/$Repo,' somefile.sh

sed -i.bak expression fileexpressionファイルに対してを実行し、-inか所で変更します。

式は、に一致する行/regex/commandで実行されるフォーム上にあります。commandregex

commandisは、s,search,replace,テキストを検索して置換します。

つまり、を含む行を検索SecondHome=し、等号の後のすべてを文字列に置き換えることでファイルを変更します。

$ DirPath / $ Repoがsomefile.shではなく置換スクリプトで定義されている場合は、一重引用符を二重引用符に置き換えることもできます。

于 2013-01-31T20:22:35.440 に答える