sedを使用して同時に削除して追加する

sedを使用して同時に削除して追加する

スクリプトに変更したい変数があります。

read -p "Enter the name of city: " city
if [[ $city =~ Liverpool ]]; then
    sed -i -e "/\$type\_of\_city =/ s/= .*/= ${city}/" /cities  
    echo -e "Liverpool: `grep '$name_of_city' cities"
fi

#都市ファイルには削除したい変数があります。

#$type_of_city = something

somethingだから、上記のコードと実際に動作するように両方を変更したいのですが、Liverpoolフラグを削除する方法がわかりません#

今わかります#$type_of_city = Liverpool。しかし、見たいです$type_of_city = Liverpool

ベストアンサー1

コードブロックを少し修正し、

read -p "Enter the name of city: " city
if [ "$city" = 'Liverpool' ]
then
    sed -Ei 's/^#* *(\$type_of_city) *= *.*/\1 = '"$city"'/' cities  
    printf "%s: %s\n" "$city" "$(grep -F "$city" cities)"
fi

ここでは、拡張 RE と行を一致させます^#* *(\$type_of_city) *= *.*。細分化すると次のようになります。

  • ^- 行の始まり
  • #*- 0個以上の#文字
  • *- 0個以上のスペース
  • ()- 囲むブロックと一致し、後で次のように使用されます。\1
  • \$type_of_city- リテラル文字列$type_of_city\$行末との間違った一致を防ぐためにエスケープ)
  • *- 0個以上のスペース
  • =- テキスト文字
  • *- 0個以上のスペース
  • .*- 0個以上の任意文字

一致が成功したら、行を次のように書き換えます。\1 = $cityここでは、\1括弧内の(... )ERE値、$cityは変数の値です。

変数の値を代替文字列$cityに直接入力するため、などの文字やシーケンスが含まれている場合は、せいぜい予期しない結果が生成されたり、エラーが発生する可能性があります。現在のコードでは、入力値が必要な句で保護されていますが、その句を削除するか、あまりにも軽減すると、この問題が発生する可能性があります。sed/\1sedifLiverpool

おすすめ記事