終了していない 's' コマンド

終了していない 's' コマンド

他の同様の質問を見ましたが、答えは役に立ちませんでした。私は初めて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

おすすめ記事