2016-09-09 14 views
2

私はそれでドル記号と変数を持っている:sedを使って文字列の後ろにドル記号を付ける方法は?

ipvar_definitions=" 
var SSH_SERVERS \$HOME_NET 
var FTP_SERVERS \$HOME_NET 
var SIP_SERVERS \$HOME_NET 
" 

私はSEDやPerlを使用して一致した後に、この変数の値を追加するか、私が使用できるものは何でも1つのライナーたいです。

sedは以下のコードを使用してしようとすると:

sed "/var SNMP_SERVERS/a ${ipvar_definitions}" /etc/snort.conf 

を、私はこのエラーを取得する:

sed: -e expression #1, char 24: expected newer version of sed 

私の変数はそれでドル記号を持っているので、私はこのエラーを取得します。私はsed、perl、awkなどを使って1つのライナーでこれを解決したいと思います。

入力:

# List of snmp servers on your network 
var SNMP_SERVERS $HOME_NET 

# Configure your service ports. This allows snort to look for attacks destined 

予想される出力:GNUを使用して

# List of snmp servers on your network 
var SNMP_SERVERS $HOME_NET 
var SSH_SERVERS $HOME_NET 
var FTP_SERVERS $HOME_NET 
var SIP_SERVERS $HOME_NET 

# Configure your service ports. This allows snort to look for attacks destined 
+0

エラー*おそらく*挿入したい各リテラルの改行の前にバックスラッシュを必要とする、あなたの 'sed'バージョンから来ています。 – tripleee

答えて

2

は、あなたがこれを行うことができますawkは:

明確化のために私はサンプル入力と期待される出力を掲示しています

# no need to escape the $ if you use single quotes 
ipvar_definitions='var SSH_SERVERS $HOME_NET 
var FTP_SERVERS $HOME_NET 
var SIP_SERVERS $HOME_NET' 

# use awk command to insert ipvar_definitions after a line containing "var SNMP_SERVERS" 
awk -v var="$ipvar_definitions" '1; /var SNMP_SERVERS/{print var}' /etc/snort.conf 

出力:

# List of snmp servers on your network 
var SNMP_SERVERS $HOME_NET 
var SSH_SERVERS $HOME_NET 
var FTP_SERVERS $HOME_NET 
var SIP_SERVERS $HOME_NET 

# Configure your service ports. This allows snort to look for attacks destined 
+0

このawkコマンドの出力を保存するには、次のようにします。 'awk -i inplace -v var =" $ ipvar_definitions "'1;/var SNMP_SERVERS/{print var} '/ etc/snort.conf' – anubhava

+0

このコマンドについて何か特有のことはありません。もちろん '-i inplace'を追加するとそうなるでしょうが、OPはそれを求めているようではありません。 –

+0

私のOSX awkが複数変数、つまり '-v var =" $ ipvar_definitions "' – anubhava

0
$ export ipvar_definitions=' 
var SSH_SERVERS $HOME_NET 
var FTP_SERVERS $HOME_NET 
var SIP_SERVERS $HOME_NET 
' 

$ perl -pe 's/.*var SNMP_SERVERS.*/$&$ENV{ipvar_definitions}/' /etc/snort.conf 
# List of snmp servers on your network 
var SNMP_SERVERS $HOME_NET 
var SSH_SERVERS $HOME_NET 
var FTP_SERVERS $HOME_NET 
var SIP_SERVERS $HOME_NET 


# Configure your service ports. This allows snort to look for attacks destined 

さらに読書:https://perldoc.perl.org/Env.html

関連する問題