構成ファイル内の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
a
テキストと改行を追加x
保存して閉じる