私のフォルダには約100個のスクリプトがあり、すべて私の変数config_listの特定の値を持っています。 14行目を編集したい
for i in 10-35-5 8-35-7
到着
for i in $config_list
ここで、config_list は数値トリプルリスト形式の文字列で、echo $config_list
次の出力を提供します。
18-32-28 20-32-26 25-32-21 27-32-19
16-32-27 18-30-27 25-32-18 28-30-17
16-30-27 16-32-25 18-32-23 18-34-21 19-31-23 20-30-23 25-32-16
など、現在のフォルダに応じて。
したがって、特定のフォルダをconfig_list
対象とする場合、0-20-0 3-15-2 5-10-5 6-8-6 7-6-7
スクリプトの14行目は次のようになります(予想出力)。
for i in 0-20-0 3-15-2 5-10-5 6-8-6 7-6-7
各リストはフォルダごとに一意であり、これらのトリプルは1〜8個あります。したがって、既定では、別のスクリプトを使用して、別のフォルダにある個々のスクリプトファイルごとにforループのパラメータを変更したいと思います。
使ってみよう
sed -i "14s/.*/for i in $config_list/" $dest/script.sh
ここで dest はターゲットフォルダのプレフィックスであり、正しく定義されています。
フォルダセット全体でスクリプトを実行すると、次のエラーが発生することがあります。
sed: -e expression #1, char 22: unterminated `s' command
エラーが発生しない場合もありますが、ターゲットファイルが変更されない場合があります。
私は同じスクリプトで同じファイルの別の行を変更するためにまったく同じ構文を使用しましたが、すべての場合で完璧に動作しましたが、そうではありません。
私は一度sed -i "2s/.*/#PBS -N li-cap-$num/" $dest/script.sh
2行目を次
#PBS -N li-cap-50
から変更しました。
#PBS -N li-cap-$num
何が問題なのかご存知ですか?
編集1:私は以下を試しました:
sed -i "/for/c\for i in $config_list" $dest/script.sh
次のエラーが発生します:
sed: -e expression #1, char 28: unknown command:
- ''
編集2:$ config_listの定義は次のとおりです。
config_list=$(ls -l | grep '^d' | awk '{print $9}')