特定の文字の後ろの文字列の後ろを見つけて置き換える

特定の文字の後ろの文字列の後ろを見つけて置き換える

入力ファイルに次の行があり、「=」記号の後のすべてのテキストを新しい文字列(「good」など)に置き換えたいと思います。

繰り返しますが、行内の特定の文字列に対してのみこれを実行したいと思います。

入力ファイル:

$myvar1=var1
$myvar2=var2
$myname=name
$myage=age
$mycity=city

結果ファイル:

$myvar1=var1
$myvar2=var2
$myname=good
$myage=good
$mycity=good

答え1

私はsedがあなたが望むものに適したツールだと思います。ここに私が実装したものがあります。私は何かを探しているのではなく、あなたが保護しているものを否定することです。

sed -r '/^((\$myvar1)|(\$myvar2))/!s/=.*$/="good"/g'

答え2

最初の2行をスキップするには、次のものを使用できます。

sed '3,$s/=.*/=good/' file

これにより、3行から最後の行()までの$交換が行われます。

答え3

これはあなたが望むものですか? GNU sedを使用してください。

sed -E '/var[0-9]/!s/(=).*/\1good/' file

答え4

$myname変更したい変数名(たとえば、、など)を事前に知っていると仮定すると、次のようになり$myageます。$mycitysed

sed -i '/^\$myname=/s/=.*$/=good/g' input_file_name
sed -i '/^\$myage=/s/=.*$/=good/g' input_file_name
sed -i '/^\$mycity/s/=.*$/=good/g' input_file_name

デフォルトでは、これは特定の一致(または^\$myname=)で始まる行でのみ正規表現を実行し、等号の後にあるすべての項目を等号とその文字列()に置き換えることを意味します。^\$myage=^\$mycity==.*$=good

-i注:そのバージョンでこのオプションを使用できない場合は、sed同じ効果を得るために次の方法を検討してください。

sed '/^\$myname=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$myage=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$mycity/s/=.*$/=good/g' input_file_name > output_file_name

関連情報