sedを使用してキーワードを見つける場合は、一部の行を編集しますか? [コピー]

sedを使用してキーワードを見つける場合は、一部の行を編集しますか? [コピー]

特定のキーワードが見つかったら、行を編集したいと思います。

CS_CODE, SM_NUM, PORT_NUM, DEV_PORT_NUM, DIRNUM, MAIN_DIRNUM, BILL_NO, ADR_NAME

上記の行に「PORT_NUM」がある場合は、「BILL_NO」を「NA」に置き換える必要があります。行のキーワードのみを変更する必要があります。

私は次の方法を使用しています:

while IFS=$'\n' read -r line
do
     if [[ $line == *"$string"* ]]; then
           < sed command to replace only keyword >
     fi
done < "$file"

この目標をどのように達成できますか?

注:「-i」拡張子は私のバージョンのsedでは機能しません。

ベストアンサー1

sedMenon、あなたはファイル全体を操作する方法に対する答えを得ました。コードスケルトンに示されているように、個々の行で作業する意図であれば、そのプログラムsed(または他の外部プログラム)は必要ありません。シェルがおそらく(以下の説明を参照)、代替操作を実行するからです。stringコード内の変数に値(たとえば)が含まれていると仮定すると、PORT_NUM変数の置換はline次のように実行できます。

while read line
do
     if [[ $line =~ $string ]]; then
           line=${line/BILL_NO/NA}
     fi
done < "$file"

(注:この代替品は、bash、ksh、zshなどの最新のシェルに適用されます。)

おすすめ記事