特定のキーワードが見つかったら、行を編集したいと思います。
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
sed
Menon、あなたはファイル全体を操作する方法に対する答えを得ました。コードスケルトンに示されているように、個々の行で作業する意図であれば、そのプログラムsed
(または他の外部プログラム)は必要ありません。シェルがおそらく(以下の説明を参照)、代替操作を実行するからです。string
コード内の変数に値(たとえば)が含まれていると仮定すると、PORT_NUM
変数の置換はline
次のように実行できます。
while read line
do
if [[ $line =~ $string ]]; then
line=${line/BILL_NO/NA}
fi
done < "$file"
(注:この代替品は、bash、ksh、zshなどの最新のシェルに適用されます。)