特定の単語/文字は含めるが他の単語/文字は含まない行を修正

特定の単語/文字は含めるが他の単語/文字は含まない行を修正

特定の単語/文字は含まれ、他の単語/文字は含まれていない複数のファイルから複数行を変更する方法を探しています。具体的には、aはFortranファイルのすべての変数宣言をからに変換しようとしますrealreal(kind=r8)たとえば、次の行は次のようになります。

  • var= (var1*REAL(j)-var2*REAL(j)*var3)
  • REAL :: pwr10
  • INTRINSIC REAL
  • REAL(kind=r16) :: qr(n), qaorg, qx
  • REAL, DIMENSION(-1:nx, -1:ny) :: arg1
  • REAL(kind=r8) :: y3

次のようにする必要があります。

  • var= (var1*REAL(j)-var2*REAL(j)*var3)

  • REAL(kind=r8) :: pwr10

  • INTRINSIC REAL
  • REAL(kind=r16) :: qr(n), qaorg, qx
  • REAL(kind=r8), DIMENSION(-1:nx, -1:ny) :: arg1
  • REAL(kind=r8) :: y3

grepを使用して特定の行を選択する方法を知っていますが、sedを使用して変更する方法はありません。誰でも助けることができますか?

ベストアンサー1

$ sed 's/REAL\([^(].*::\)/REAL(kind=r8)\1/' file
var= (var1*REAL(j)-var2*REAL(j)*var3)
REAL(kind=r8) :: pwr10
INTRINSIC REAL
REAL(kind=r16) :: qr(n), qaorg, qx
REAL(kind=r8), DIMENSION(-1:nx, -1:ny) :: arg1
REAL(kind=r8) :: y3

表現sed方式

s/REAL\([^(].*::\)/REAL(kind=r8)\1/

すべてREAL次へ交換REAL(kind=r8)

  1. 文字列はREALすぐには続きません(
  2. ::同じ行に後で席があります。

私が書いた方法によると、文字列は行REALのどこにでも現れることがあります。単語が行の最初に表示される場合(行の先頭と単語の間にスペースや何もありません)、代替式の最初の^REAL単語が使用されます。REAL

おすすめ記事