Bashスクリプトで設定ファイルに行を追加しますか?

Bashスクリプトで設定ファイルに行を追加しますか?

構成ファイル内の1行を見つける場所を見つけて、2行をドロップダウンして1行のコードを挿入しようとしています。 awk / sedでこれを実行しようとしましたが、キャリッジリターンで停止しました。私はawk / sedに頼らずにこれを行うためのきちんとした方法を探しています。

<Location />
  Order allow,deny
</Location>

次に、ブロック内に1行を追加します。

<Location />
  Order allow,deny
  Allow all
</Location>

答え1

sed '/Order allow,deny/ aAllow all' < yourFile

これにより、変更されたファイルが次に出力されます。標準出力。その場で修正したい場合(sed(1)):

-i[サフィックス]、--in-place[=サフィックス]

          edit files in place (makes backup if SUFFIX supplied)

説明する:

For each line that matches `/Order allow,deny/`:
     Execute command 'a' (append) with 'Allow all' as parameter

http://grymoire.com/Unix/sed.htmlもっと学ぶための素晴らしい資料ですsed

答え2

awkこの目的に使用できます。以下のスクリプトは、<Location />タグが見つかった場合にのみテキストを追加します。

awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4) print "  Allow all"} 1' infile

次の入力ファイルの場合:

stuff
<Location />
  Order allow,deny
</Location>
more
stuff

このスクリプトは以下を生成します。

stuff
<Location />
  Order allow,deny
  Allow all
</Location>
more
stuff

次のように複数の部分を置き換えたい場合は、同じスクリプトを簡単に変更できます。

awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4){print "  Allow all"; start=0}} 1' infile

答え3

Allow all盲目的にステートメントを追加する場合は、Order allow,deny次のようにsedなります。

sed -i 's/Order\ allow,deny/Order\ allow,deny\nAllow\ all/' <inputfilename>

答え4

ExモードでVimを使用できます。

ex -sc '/Order allow,deny/a|Allow all' -cx file
  1. aテキストと改行を追加

  2. x保存して閉じる

関連情報