ineedtoknow
ineedtoknow

Reputation: 13

Simple method for finding and replacing string linux

I'm currently trying to find a line in a file

#define IMAX 8000

and replacing 8000 with another number.

Currently, stuck trying to pipe arguments from awk into sed.

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

Not too sure how to proceed from here.

Upvotes: 0

Views: 64

Answers (3)

Richard Ellwood
Richard Ellwood

Reputation: 159

You may use GNU sed.

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

Which will invoke sed to do an in-place edit due to the -i option. This can be called from bash.

If you really really want to use just bash, then the following can work:

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

This loops over each line, doing a substitution, and writing to a temporary file (don't want to clobber the input). The move at the end just moves temporary to the original name.

Upvotes: 0

RavinderSingh13
RavinderSingh13

Reputation: 133428

Could you please try following. Place new number's value in place of new_number too.(tested this with GNU sed)

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

In case you are reading input from an Input_file and want to save its output into Input_file itself use following then.

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

Add -i flag in above code in case you want to save output into Input_file itself. Also my codes will catch any digits which are coming at the end of the line which has string #define IMAX so in case you only want to look for 8000 or any fixed number change [0-9]+$ to 8000 etc in above codes then.

Upvotes: 1

Rafael
Rafael

Reputation: 7746

I would do something like:

sed -i '' '/^#define IMAX 8000$/s/8000/NEW_NUMBER/' 1d_Euler_mpi_test.c

Upvotes: 1

Related Questions