Простой метод поиска и замены строки linux - PullRequest
0 голосов
/ 30 октября 2018

Я сейчас пытаюсь найти строку в файле

#define IMAX 8000

и замена 8000 другим номером.

В настоящее время застрял, пытаясь передать аргументы из awk в sed.

grep '#define IMAX' 1d_Euler_mpi_test.c | awk '{print $3}' | sed

Не совсем уверен, как действовать дальше.

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Я бы сделал что-то вроде:

sed -i '' '/^#define IMAX 8000$/s/8000/NEW_NUMBER/' 1d_Euler_mpi_test.c
0 голосов
/ 30 октября 2018

Вы можете использовать GNU sed.

sed -i -e 's/IMAX 8000/IMAX 9000/g' /tmp/file.txt

Который будет вызывать sed для редактирования на месте из-за опции -i. Это можно вызвать из bash.

Если вы действительно хотите использовать только bash, то может работать следующее:

while read a ; do echo ${a//IMAX 8000/IMAX 9000} ; done < /tmp/file.txt > /tmp/file.txt.t ; mv /tmp/file.txt{.t,}

Это зацикливает каждую строку, делая подстановку и записывая во временный файл (не желая засорять ввод). Движение в конце просто временно перемещается к исходному имени.

0 голосов
/ 30 октября 2018

Не могли бы вы попробовать следующее. Поместите новое число вместо new_number. (Протестировано с GNU sed)

echo "#define IMAX 8000" | sed -E '/#define IMAX /s/[0-9]+$/new_number/'

Если вы читаете ввод из файла Input_file и хотите сохранить его вывод в самом файле Input_file, используйте следующее.

sed -E '/#define IMAX /s/[0-9]+$/new_number/' Input_file

Добавьте -i флаг в приведенном выше коде на случай, если вы хотите сохранить вывод в сам файл Input_file. Также мои коды будут перехватывать любые цифры, которые идут в конце строки со строкой #define IMAX, поэтому в случае, если вы хотите искать только 8000 или любое фиксированное число, измените [0-9]+$ на 8000 и т. Д. В вышеуказанных кодах то.

...