このコマンドの機能を理解するのに役立ちます。

このコマンドの機能を理解するのに役立ちます。

cronジョブの実行問題を解決するためのコマンドをstackoverflowで見ました。 https://stackoverflow.com/questions/21926465/issues-running-cron-in-docker-on- Different-hosts 私はUnixコマンドに初めて触れたので、このコマンドが正確に何をしているのかわかりません。各部の機能を教えてくれる専門家はいますか?

sed --regexp-extended --in-place 's/^session\s+required\s+pam_loginuid.so$/session optional pam_loginuid.so/' /etc/pam.d/crond

答え1

sed次のように使用できるコマンドラインテキストエディタですsed -flags command file。正規表現を使用した検索と置換に最も一般的に使用されます。いろんなことができることがわかったhttps://www.grymoire.com/Unix/Sed.html良い初心者ガイドを作成します。 (manページよりもユーザーフレンドリーです。)

正規表現は、特定の項目ではなくテキストパターンを見つけることができる複雑なワイルドカードシステムのようなものです。

--regexp-extendedより機能的な拡張正規表現を使用するように指示します。

--in-place出力をシェルまたは標準出力に印刷するのではなく、ファイルを変更するように指示します。

's/foo/bar'sedの代替コマンドです(sはAlternativeを表します)。各行で最初の「foo」を見つけて「bar」に置き換えます。

^session^正規表現の行の先頭を示します。

\s+\s「すべての空白」を意味します。つまり、正規表現のスペースやタブ、または類似の文字は+1つ以上を意味するため、1つ以上のスペース/タブ/などと一致します。+正規表現を拡張する必要がある

...nuid.so$$正規表現の行末を示します。

したがって、これは似ていますが、より多くのスペース/タブを持つファイルのすべての行を見つけて、1つのスペースに置き換え、ファイルから、にsession optional pam_loginuid.so置き換えることです。session optional pam_loginuid.sorequiredoptional/etc/pam.d/crond

これは&&、「このコマンドが0を返す場合は次のコマンドを実行します」を意味し、bashのほとんどは競合しない場合は0を返します。 sedは置き換える項目が見つからない場合でも0を返すため、ほとんど常にこれが発生します。

最後のコマンドは\改行を無視するので、何かが機能しない限り、次の行のコマンドも実行されます。

したがって、基本的に追加のスペースを変更してrequired削除しますが、これが一般的に行われている操作をoptional特定するのに役立つことを願っています。sed 's/thing/otherThing/'

関連情報