изменить строки, содержащие определенные слова / символы и не содержащие других

Похоже, что в настройках BIOS не включен "съемный носитель", попробуйте включить его, а затем повторите попытку, чтобы отобразить всплывающее окно загрузки.

0
11.06.2018, 12:08
2 ответа
$ 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

La ​​expresión sed

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

sustituirá todo REALpor REAL(kind=r8)siempre que

  1. La cadena REALno va seguida inmediatamente de (.
  2. Hay un ::en algún lugar más adelante en la misma línea.

De la forma en que lo he escrito, la cadena REALpuede aparecer en cualquier lugar de la línea. Use ^REALen lugar del primero REALen la expresión si la palabra aparece primero en la línea (sin espacios ni nada entre el comienzo de la línea y la palabra ).

2
28.01.2020, 02:31
perl  -pe '/\h::\h/ && /^\h*REAL(?!\()\K/ and s//(kind=r8)/' input.txt

para ser leído como:

  • cuando cada línea tiene una subcadena "::" delimitada por un espacio en blanco.
  • la palabra clave "REAL" comienza al principio de la línea precedida opcionalmente por un espacio en blanco y no ve un corchete de apertura a su derecha.
  • cuando se cumplen las dos condiciones anteriores, realizamos la sustitución.
  • el comando s// (kind=r8 )/ significa usar la expresión regular de la coincidencia exitosa anterior y reemplazarla con lo que esté en el RHS.

Salida

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
0
28.01.2020, 02:31

Теги

Похожие вопросы