I have a file that contains:
<?php return 0;
I want to replace in bash, the value 0
by the current timestamp.
I know I can get the current timestamp with:
date +%s
And I can replace strings with sed
:
sed 's/old/new/g' input.txt > output.txt
But how to combine the two to achieve what I want? Solutions not involving sed
and date
are welcome as well, as long as they only use shell tools.
The return value of a command is stored in the $? variable. The return value is called exit status. This value can be used to determine whether a command completed successfully or unsuccessfully.
To replace content in a file, you must search for the particular file string. The 'sed' command is used to replace any string in a file using a bash script. This command can be used in various ways to replace the content of a file in bash. The 'awk' command can also be used to replace the string in a file.
In general, do use this syntax:
sed "s/<expression>/$(command)/" file
This will look for <expression>
and replace it with the output of command
.
For your specific problem, you can use the following:
sed "s/0/$(date +%s)/g" input.txt > output.txt
This replaces any 0
present in the file with the output of the command date +%s
. Note you need to use double quotes to make the command in $()
be interpreted. Otherwise, you would get a literal $(date +%s)
.
If you want the file to be updated automatically, add -i
to the sed command: sed -i "s/...
. This is called in-place editing.
Given a file with this content:
<?php return 0;
Let's see what it returns:
$ sed "s/0/$(date +%s)/g" file <?php return 1372175125;
When the replacement string has newlines and spaces, you can use something else. We will try to insert the output of ls -l
in the middle of some template file.
awk 'NR==FNR {a[NR]=$0;next} {print} /Insert index here/ {for (i=1; i <= length(a); i++) { print a[i] }}' <(ls -l) template.file
or
sed '/^Insert after this$/r'<(ls -l) template.file
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With