他の同様の質問を見ましたが、答えは役に立ちませんでした。私は初めてbashに触れ、スクリプトに構文エラーがあるかもしれませんが、どこにいるのかわかりません。このスクリプトを実行するたびに、example.confファイルのユーザーを更新しようとします。各ユーザーには name.pub ファイルがあります。
VAR1=$( ls | grep ".pub" |sed "s/.pub//g")
VAR2="@demo_project_users = "
res=$VAR2$VAR1
sed "s/@demo_project_users = .*/$res/g" example.conf
これによりUnterminated 's' command
エラーが発生します。
編集:これらのファイルをフォルダに入れました
aaaaaaaaaa.pub eboh.pub get_usernames.sh mmusterfrau.pub plom.pub rrein.pub update_users.sh
dboh.pub example.conf leni.pub mmustermann.pub rcall.pub tani.pub
以下のように、間にスペースを入れて、すべてのユーザー名(.pubを除く)を1行に入力したいと思います。
@demo_project_users = (... all names here)
ベストアンサー1
ファイルgrep
名は、指定された値に$res
改行文字を含む複数のファイル名と一致させることができます。sed
リテラル改行文字を含む代替文字列を使用すると、GNUは説明したように文句を言います。
grep
フィルタリングされた出力には使用しないでくださいls
。パターンに一致する現在のディレクトリのすべての名前を取得するには、*.pub
次のようにします。
filenames=( *.pub )
これにより、指定されたパターンに一致するすべての名前を含む配列が作成されます。
それから:
sed 's/\(@demo_project_users = \).*/\1'"${filenames[*]%.pub}"'/g' example.conf
Expandは、"${filenames[*]%.pub}"
配列内の各ファイル名で構成される単一の文字列に展開され、filenames
空白(または最初の文字が何でも$IFS
デフォルトで空白)で区切られ、.pub
各ファイル名からサフィックス文字列を削除します。
"${filenames[*]}"
スペースで区切られた文字列に拡張されるビットと、%.pub
各ファイル名からサフィックスを削除するビット。.pub