Command working in interactive shell, but not inside script
Clash Royale CLAN TAG#URR8PPP
I have a text file named crn.txt
containing text below:
9 1 * * 3,6 /opt/testtingtools/kos/bin/cos.sh
55 23 * * * /opt/testtingtools/tqdaily.sh 2>>/opt/toolcheck/extract.err
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I need to delete the lines containing a word testtingtools
and update crn.txt
so that the output looks like this:
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I am using the command
sed '/testtingtools/d' crn.txt 2>&1 | tee crn.txt
It works in bash or the command line, but not inside the script. I am using unix server (sun solaris).
One more command working in linux but not in unix:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
"Not working" means it is not deleting a particular line, it empties the entire file when I use the code inside the script. But when I use the code in command line, it deletes the line containing testting word from crn.txt
.
sed
add a comment |
I have a text file named crn.txt
containing text below:
9 1 * * 3,6 /opt/testtingtools/kos/bin/cos.sh
55 23 * * * /opt/testtingtools/tqdaily.sh 2>>/opt/toolcheck/extract.err
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I need to delete the lines containing a word testtingtools
and update crn.txt
so that the output looks like this:
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I am using the command
sed '/testtingtools/d' crn.txt 2>&1 | tee crn.txt
It works in bash or the command line, but not inside the script. I am using unix server (sun solaris).
One more command working in linux but not in unix:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
"Not working" means it is not deleting a particular line, it empties the entire file when I use the code inside the script. But when I use the code in command line, it deletes the line containing testting word from crn.txt
.
sed
In order to edit your question and accept an answer, you should register this account (unix.stackexchange.com/users/327289/user327289) - it appears you've accidentally created two separate accounts to reply (1 and 2)
– Jeff Schaller
Dec 17 at 18:18
add a comment |
I have a text file named crn.txt
containing text below:
9 1 * * 3,6 /opt/testtingtools/kos/bin/cos.sh
55 23 * * * /opt/testtingtools/tqdaily.sh 2>>/opt/toolcheck/extract.err
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I need to delete the lines containing a word testtingtools
and update crn.txt
so that the output looks like this:
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I am using the command
sed '/testtingtools/d' crn.txt 2>&1 | tee crn.txt
It works in bash or the command line, but not inside the script. I am using unix server (sun solaris).
One more command working in linux but not in unix:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
"Not working" means it is not deleting a particular line, it empties the entire file when I use the code inside the script. But when I use the code in command line, it deletes the line containing testting word from crn.txt
.
sed
I have a text file named crn.txt
containing text below:
9 1 * * 3,6 /opt/testtingtools/kos/bin/cos.sh
55 23 * * * /opt/testtingtools/tqdaily.sh 2>>/opt/toolcheck/extract.err
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I need to delete the lines containing a word testtingtools
and update crn.txt
so that the output looks like this:
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
I am using the command
sed '/testtingtools/d' crn.txt 2>&1 | tee crn.txt
It works in bash or the command line, but not inside the script. I am using unix server (sun solaris).
One more command working in linux but not in unix:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
"Not working" means it is not deleting a particular line, it empties the entire file when I use the code inside the script. But when I use the code in command line, it deletes the line containing testting word from crn.txt
.
sed
sed
edited Dec 17 at 15:19
Kusalananda
121k16229372
121k16229372
asked Dec 17 at 15:09
user327289
1
1
In order to edit your question and accept an answer, you should register this account (unix.stackexchange.com/users/327289/user327289) - it appears you've accidentally created two separate accounts to reply (1 and 2)
– Jeff Schaller
Dec 17 at 18:18
add a comment |
In order to edit your question and accept an answer, you should register this account (unix.stackexchange.com/users/327289/user327289) - it appears you've accidentally created two separate accounts to reply (1 and 2)
– Jeff Schaller
Dec 17 at 18:18
In order to edit your question and accept an answer, you should register this account (unix.stackexchange.com/users/327289/user327289) - it appears you've accidentally created two separate accounts to reply (1 and 2)
– Jeff Schaller
Dec 17 at 18:18
In order to edit your question and accept an answer, you should register this account (unix.stackexchange.com/users/327289/user327289) - it appears you've accidentally created two separate accounts to reply (1 and 2)
– Jeff Schaller
Dec 17 at 18:18
add a comment |
2 Answers
2
active
oldest
votes
Solaris sed
can not do in-place editing.
On Linux, you would have used
sed -i '/testtingtools/d' crn.txt
The portable way of doing it, which would work on both Solaris and Linux, is
cp crn.txt crn.tmp
sed '/testtingtools/d' <crn.tmp >crn.txt &&
rm crn.tmp
What's probably happening for you is that tee
truncates the file before sed
has a chance of reading from it, resulting in an empty file. Commands in a pipeline are run concurrently.
In general you'd want to avoid reading from a file that you are truncating in the same command, and instead use a temporary file. This is what sed -i
does behind the scenes.
Likewise with your other command:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
which is better written as
sed '/testtingtools/d' crn.txt >crn.txt
The first thing that would happen in any standard shell (on Linux and on Solaris), is that the shell sees the redirection and truncates the output file to zero size. Then it executes sed
. This command would not work as expected on Linux nor on Solaris (if you expect it to edit the original file, that is).
1
no-i
in Solaris sed
– Jeff Schaller
Dec 17 at 15:26
@JeffSchaller Thanks Jeff.
– Kusalananda
Dec 17 at 15:26
1
I always like to plug Scott's version of this:cp input_file temp_file && command … temp_file > input_file && rm temp_file
-- and that's what you already did!
– Jeff Schaller
Dec 17 at 15:27
1
@JeffSchaller Almost, apart from the conditionals. It keeps the permissions/ownerships on the original file. Actually, the conditionals are not needed as a failure tocp
the file would result insed
not running and the original file being left untouched. Hmm... a&&
beforerm
may be prudent however.
– Kusalananda
Dec 17 at 15:28
add a comment |
We can do it both sed and awk
awk method
awk '!/testtingtools/print $0' crn.txt >l.txt &&yes| mv l.txt crn.txt
output
cat crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f489497%2fcommand-working-in-interactive-shell-but-not-inside-script%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Solaris sed
can not do in-place editing.
On Linux, you would have used
sed -i '/testtingtools/d' crn.txt
The portable way of doing it, which would work on both Solaris and Linux, is
cp crn.txt crn.tmp
sed '/testtingtools/d' <crn.tmp >crn.txt &&
rm crn.tmp
What's probably happening for you is that tee
truncates the file before sed
has a chance of reading from it, resulting in an empty file. Commands in a pipeline are run concurrently.
In general you'd want to avoid reading from a file that you are truncating in the same command, and instead use a temporary file. This is what sed -i
does behind the scenes.
Likewise with your other command:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
which is better written as
sed '/testtingtools/d' crn.txt >crn.txt
The first thing that would happen in any standard shell (on Linux and on Solaris), is that the shell sees the redirection and truncates the output file to zero size. Then it executes sed
. This command would not work as expected on Linux nor on Solaris (if you expect it to edit the original file, that is).
1
no-i
in Solaris sed
– Jeff Schaller
Dec 17 at 15:26
@JeffSchaller Thanks Jeff.
– Kusalananda
Dec 17 at 15:26
1
I always like to plug Scott's version of this:cp input_file temp_file && command … temp_file > input_file && rm temp_file
-- and that's what you already did!
– Jeff Schaller
Dec 17 at 15:27
1
@JeffSchaller Almost, apart from the conditionals. It keeps the permissions/ownerships on the original file. Actually, the conditionals are not needed as a failure tocp
the file would result insed
not running and the original file being left untouched. Hmm... a&&
beforerm
may be prudent however.
– Kusalananda
Dec 17 at 15:28
add a comment |
Solaris sed
can not do in-place editing.
On Linux, you would have used
sed -i '/testtingtools/d' crn.txt
The portable way of doing it, which would work on both Solaris and Linux, is
cp crn.txt crn.tmp
sed '/testtingtools/d' <crn.tmp >crn.txt &&
rm crn.tmp
What's probably happening for you is that tee
truncates the file before sed
has a chance of reading from it, resulting in an empty file. Commands in a pipeline are run concurrently.
In general you'd want to avoid reading from a file that you are truncating in the same command, and instead use a temporary file. This is what sed -i
does behind the scenes.
Likewise with your other command:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
which is better written as
sed '/testtingtools/d' crn.txt >crn.txt
The first thing that would happen in any standard shell (on Linux and on Solaris), is that the shell sees the redirection and truncates the output file to zero size. Then it executes sed
. This command would not work as expected on Linux nor on Solaris (if you expect it to edit the original file, that is).
1
no-i
in Solaris sed
– Jeff Schaller
Dec 17 at 15:26
@JeffSchaller Thanks Jeff.
– Kusalananda
Dec 17 at 15:26
1
I always like to plug Scott's version of this:cp input_file temp_file && command … temp_file > input_file && rm temp_file
-- and that's what you already did!
– Jeff Schaller
Dec 17 at 15:27
1
@JeffSchaller Almost, apart from the conditionals. It keeps the permissions/ownerships on the original file. Actually, the conditionals are not needed as a failure tocp
the file would result insed
not running and the original file being left untouched. Hmm... a&&
beforerm
may be prudent however.
– Kusalananda
Dec 17 at 15:28
add a comment |
Solaris sed
can not do in-place editing.
On Linux, you would have used
sed -i '/testtingtools/d' crn.txt
The portable way of doing it, which would work on both Solaris and Linux, is
cp crn.txt crn.tmp
sed '/testtingtools/d' <crn.tmp >crn.txt &&
rm crn.tmp
What's probably happening for you is that tee
truncates the file before sed
has a chance of reading from it, resulting in an empty file. Commands in a pipeline are run concurrently.
In general you'd want to avoid reading from a file that you are truncating in the same command, and instead use a temporary file. This is what sed -i
does behind the scenes.
Likewise with your other command:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
which is better written as
sed '/testtingtools/d' crn.txt >crn.txt
The first thing that would happen in any standard shell (on Linux and on Solaris), is that the shell sees the redirection and truncates the output file to zero size. Then it executes sed
. This command would not work as expected on Linux nor on Solaris (if you expect it to edit the original file, that is).
Solaris sed
can not do in-place editing.
On Linux, you would have used
sed -i '/testtingtools/d' crn.txt
The portable way of doing it, which would work on both Solaris and Linux, is
cp crn.txt crn.tmp
sed '/testtingtools/d' <crn.tmp >crn.txt &&
rm crn.tmp
What's probably happening for you is that tee
truncates the file before sed
has a chance of reading from it, resulting in an empty file. Commands in a pipeline are run concurrently.
In general you'd want to avoid reading from a file that you are truncating in the same command, and instead use a temporary file. This is what sed -i
does behind the scenes.
Likewise with your other command:
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
which is better written as
sed '/testtingtools/d' crn.txt >crn.txt
The first thing that would happen in any standard shell (on Linux and on Solaris), is that the shell sees the redirection and truncates the output file to zero size. Then it executes sed
. This command would not work as expected on Linux nor on Solaris (if you expect it to edit the original file, that is).
edited Dec 17 at 15:33
answered Dec 17 at 15:16
Kusalananda
121k16229372
121k16229372
1
no-i
in Solaris sed
– Jeff Schaller
Dec 17 at 15:26
@JeffSchaller Thanks Jeff.
– Kusalananda
Dec 17 at 15:26
1
I always like to plug Scott's version of this:cp input_file temp_file && command … temp_file > input_file && rm temp_file
-- and that's what you already did!
– Jeff Schaller
Dec 17 at 15:27
1
@JeffSchaller Almost, apart from the conditionals. It keeps the permissions/ownerships on the original file. Actually, the conditionals are not needed as a failure tocp
the file would result insed
not running and the original file being left untouched. Hmm... a&&
beforerm
may be prudent however.
– Kusalananda
Dec 17 at 15:28
add a comment |
1
no-i
in Solaris sed
– Jeff Schaller
Dec 17 at 15:26
@JeffSchaller Thanks Jeff.
– Kusalananda
Dec 17 at 15:26
1
I always like to plug Scott's version of this:cp input_file temp_file && command … temp_file > input_file && rm temp_file
-- and that's what you already did!
– Jeff Schaller
Dec 17 at 15:27
1
@JeffSchaller Almost, apart from the conditionals. It keeps the permissions/ownerships on the original file. Actually, the conditionals are not needed as a failure tocp
the file would result insed
not running and the original file being left untouched. Hmm... a&&
beforerm
may be prudent however.
– Kusalananda
Dec 17 at 15:28
1
1
no
-i
in Solaris sed– Jeff Schaller
Dec 17 at 15:26
no
-i
in Solaris sed– Jeff Schaller
Dec 17 at 15:26
@JeffSchaller Thanks Jeff.
– Kusalananda
Dec 17 at 15:26
@JeffSchaller Thanks Jeff.
– Kusalananda
Dec 17 at 15:26
1
1
I always like to plug Scott's version of this:
cp input_file temp_file && command … temp_file > input_file && rm temp_file
-- and that's what you already did!– Jeff Schaller
Dec 17 at 15:27
I always like to plug Scott's version of this:
cp input_file temp_file && command … temp_file > input_file && rm temp_file
-- and that's what you already did!– Jeff Schaller
Dec 17 at 15:27
1
1
@JeffSchaller Almost, apart from the conditionals. It keeps the permissions/ownerships on the original file. Actually, the conditionals are not needed as a failure to
cp
the file would result in sed
not running and the original file being left untouched. Hmm... a &&
before rm
may be prudent however.– Kusalananda
Dec 17 at 15:28
@JeffSchaller Almost, apart from the conditionals. It keeps the permissions/ownerships on the original file. Actually, the conditionals are not needed as a failure to
cp
the file would result in sed
not running and the original file being left untouched. Hmm... a &&
before rm
may be prudent however.– Kusalananda
Dec 17 at 15:28
add a comment |
We can do it both sed and awk
awk method
awk '!/testtingtools/print $0' crn.txt >l.txt &&yes| mv l.txt crn.txt
output
cat crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
add a comment |
We can do it both sed and awk
awk method
awk '!/testtingtools/print $0' crn.txt >l.txt &&yes| mv l.txt crn.txt
output
cat crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
add a comment |
We can do it both sed and awk
awk method
awk '!/testtingtools/print $0' crn.txt >l.txt &&yes| mv l.txt crn.txt
output
cat crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
We can do it both sed and awk
awk method
awk '!/testtingtools/print $0' crn.txt >l.txt &&yes| mv l.txt crn.txt
output
cat crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
answered Dec 18 at 10:58
Praveen Kumar BS
1,196138
1,196138
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f489497%2fcommand-working-in-interactive-shell-but-not-inside-script%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
In order to edit your question and accept an answer, you should register this account (unix.stackexchange.com/users/327289/user327289) - it appears you've accidentally created two separate accounts to reply (1 and 2)
– Jeff Schaller
Dec 17 at 18:18