終了/開始スペースを含む文字列とない文字列を区別する方法は? [コピー]

終了/開始スペースを含む文字列とない文字列を区別する方法は? [コピー]

テキストファイル(Fortranソースコード)をフォーマットし、一部のキーワードを小文字から大文字に、またはその逆に変更する必要があります。可能なキーワードのリストを作成し、次のスクリプトを作成しました。

 for ((i=0; i<$nwords; i++ )); do
    word=${words[$i]}
    small=${word,,}
    cap=${word^^}
    sed -i "s/$small/$cap/gI" $filein
  done

正常に動作します。質問は次のとおりです。

キーワードの 1 つが「use」で、テストのどこかに「uselog」という単語があるとします。スクリプトはこれをとにかく避けたい「USERlog」に変更します。私の考えはキーワードにスペースを追加することでしたが、何とか自動的に切り捨てられます。私は、「使用」の代わりに「使用」または「使用」を試しましたが、結果は同じであるということです。

引用符、角かっこ、または同様のものを使用するなど、これを行う簡単な方法が必要だと思いますが、これまで見つかりませんでした。他の選択肢も大歓迎です。

ベストアンサー1

単語の境界を使用するとGNU sed使用できます\b

単語の境界と一致します。つまり、左側の文字が「単語」文字で、右側の文字が「非単語」文字の場合は一致し、その逆も同様です。

sed 's/\bword\b/newword/g' file.txt

キーワードを入力するにはspace:

sed 's/\sword\s/ newword /g' file.txt

参考にしてくださいニューワード両側に一つずつスペースがあります。

おすすめ記事