sedコマンドを使用すると奇妙な動作が発生します(この場合はawkではなくsedでなければなりません)。誰かが私が間違っていることを説明できることを願って、2つの質問があります。
次の行を使用して、/etc/sudoersにコメントと2つのコマンドを追加したいと思います。
sed -i -e '$a\# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\n\apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\n\Defaults:apache !requiretty' /etc/sudoers
ここで奇妙なことが起こっています。
- 最初の行(コメント)は、空行を作成せずにファイルの末尾に直接追加されます(修正をリンクしたい「デザインアイテム」のみ)。
- 生成された2番目の行は、次から始まります。^その波変えるApache
Q:
1. sed one-linerを使用してファイルの末尾に空白行を追加し、空白行の後にテキストを挿入するにはどうすればよいですか?
2.私が欲しいテキストを追加するためにsedを取得するには、1行で何を修正する必要がありますか? (2行目は次から始まります。Apacheまさか^その波
ご意見ありがとうございました。
答え1
なぜなら、この\a
役割はCtrl+G- 後でこの役割から抜け出す必要がないからです。\n
メンテナンスのために少し1行にして、実際の改行を使用してコマンドを続行することをお勧めしますa
。また、希望の空行もアクティブになります。
sed -i -e '$a\
\
# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\
apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\
Defaults:apache !requiretty' /etc/sudoers
答え2
sedを使用する特別な理由はありますか?なぜできません...
echo -e '\n# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\napache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\nDefaults:apache !requiretty' >>/etc/sudoers
"apache" の最初の "a" は前の "\" にエスケープされて "^Gpache" になります。 「\n」の後にある「\」を削除すると、その特定のケースを解決できます。新しい行でコメントを開始するには、 "$a\" の後に "\n" を挿入します。おそらく...
sed -i -e '$a\ \n# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\napache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\nDefaults:apache !requiretty' /etc/sudoers
完全な開示:私はこれらのソリューションをテストしていません。