Excise recent date from log file, output as motd
For finding a date in a log file I've arrived at the following crude command:
grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]
That does what I need, which is to output the date of the last system upgrade I did on my Void machine: for example 2019-01-24. But it's a pretty cumbersome line and quite crude as well. I assume there must be a more elegant solution to extract the needed date from this file. Incidentally, the date is comprised by the first 10 characters of the line containing the text grep
'd for. Any suggestions for a more elegant solution?
This line, btw, is being used to produce a motd
so that when I log into my system I'll see something like "last system upgrade 2019-01-24." So I created a script /etc/motd.sh
with that line in it, which then gets called from /etc/profile. Am I going about making the information visible in the correct way? What might be some other alternatives for doing what I want?
The script /etc/motd.sh
looks like:
#!/bin/bash
echo last system upgrade $(grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9])
PS Here's a sample line from the log file, as requested:
2019-01-15T18:05:51.31699 user.notice: Jan 15 12:05:51 xbps-install: Installed `brotli-1.0.7_1' successfully (rootdir: /).
2019-01-15T18:05:51.35465 user.notice: Jan 15 12:05:51 xbps-install: Updated `xwininfo-1.1.4_2' successfully (rootdir: /).
bash grep motd
add a comment |
For finding a date in a log file I've arrived at the following crude command:
grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]
That does what I need, which is to output the date of the last system upgrade I did on my Void machine: for example 2019-01-24. But it's a pretty cumbersome line and quite crude as well. I assume there must be a more elegant solution to extract the needed date from this file. Incidentally, the date is comprised by the first 10 characters of the line containing the text grep
'd for. Any suggestions for a more elegant solution?
This line, btw, is being used to produce a motd
so that when I log into my system I'll see something like "last system upgrade 2019-01-24." So I created a script /etc/motd.sh
with that line in it, which then gets called from /etc/profile. Am I going about making the information visible in the correct way? What might be some other alternatives for doing what I want?
The script /etc/motd.sh
looks like:
#!/bin/bash
echo last system upgrade $(grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9])
PS Here's a sample line from the log file, as requested:
2019-01-15T18:05:51.31699 user.notice: Jan 15 12:05:51 xbps-install: Installed `brotli-1.0.7_1' successfully (rootdir: /).
2019-01-15T18:05:51.35465 user.notice: Jan 15 12:05:51 xbps-install: Updated `xwininfo-1.1.4_2' successfully (rootdir: /).
bash grep motd
2
I think it'd help answerers to see sample lines from the input file
– Jeff Schaller
yesterday
I agree with Jeff, but also, if it works, it works. Without seeing the input file, it doesn't seem so inelegant to me.
– Sparhawk
yesterday
The sample line doesn't have 'Updated' in it, is there more to the line?
– user1794469
yesterday
add a comment |
For finding a date in a log file I've arrived at the following crude command:
grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]
That does what I need, which is to output the date of the last system upgrade I did on my Void machine: for example 2019-01-24. But it's a pretty cumbersome line and quite crude as well. I assume there must be a more elegant solution to extract the needed date from this file. Incidentally, the date is comprised by the first 10 characters of the line containing the text grep
'd for. Any suggestions for a more elegant solution?
This line, btw, is being used to produce a motd
so that when I log into my system I'll see something like "last system upgrade 2019-01-24." So I created a script /etc/motd.sh
with that line in it, which then gets called from /etc/profile. Am I going about making the information visible in the correct way? What might be some other alternatives for doing what I want?
The script /etc/motd.sh
looks like:
#!/bin/bash
echo last system upgrade $(grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9])
PS Here's a sample line from the log file, as requested:
2019-01-15T18:05:51.31699 user.notice: Jan 15 12:05:51 xbps-install: Installed `brotli-1.0.7_1' successfully (rootdir: /).
2019-01-15T18:05:51.35465 user.notice: Jan 15 12:05:51 xbps-install: Updated `xwininfo-1.1.4_2' successfully (rootdir: /).
bash grep motd
For finding a date in a log file I've arrived at the following crude command:
grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]
That does what I need, which is to output the date of the last system upgrade I did on my Void machine: for example 2019-01-24. But it's a pretty cumbersome line and quite crude as well. I assume there must be a more elegant solution to extract the needed date from this file. Incidentally, the date is comprised by the first 10 characters of the line containing the text grep
'd for. Any suggestions for a more elegant solution?
This line, btw, is being used to produce a motd
so that when I log into my system I'll see something like "last system upgrade 2019-01-24." So I created a script /etc/motd.sh
with that line in it, which then gets called from /etc/profile. Am I going about making the information visible in the correct way? What might be some other alternatives for doing what I want?
The script /etc/motd.sh
looks like:
#!/bin/bash
echo last system upgrade $(grep Updated /var/log/socklog/xbps/current | tail -n 1 | grep -Eo ^20[0-9][0-9]-[0-9][0-9]-[0-9][0-9])
PS Here's a sample line from the log file, as requested:
2019-01-15T18:05:51.31699 user.notice: Jan 15 12:05:51 xbps-install: Installed `brotli-1.0.7_1' successfully (rootdir: /).
2019-01-15T18:05:51.35465 user.notice: Jan 15 12:05:51 xbps-install: Updated `xwininfo-1.1.4_2' successfully (rootdir: /).
bash grep motd
bash grep motd
edited 9 mins ago
MJiller
asked yesterday
MJillerMJiller
9217
9217
2
I think it'd help answerers to see sample lines from the input file
– Jeff Schaller
yesterday
I agree with Jeff, but also, if it works, it works. Without seeing the input file, it doesn't seem so inelegant to me.
– Sparhawk
yesterday
The sample line doesn't have 'Updated' in it, is there more to the line?
– user1794469
yesterday
add a comment |
2
I think it'd help answerers to see sample lines from the input file
– Jeff Schaller
yesterday
I agree with Jeff, but also, if it works, it works. Without seeing the input file, it doesn't seem so inelegant to me.
– Sparhawk
yesterday
The sample line doesn't have 'Updated' in it, is there more to the line?
– user1794469
yesterday
2
2
I think it'd help answerers to see sample lines from the input file
– Jeff Schaller
yesterday
I think it'd help answerers to see sample lines from the input file
– Jeff Schaller
yesterday
I agree with Jeff, but also, if it works, it works. Without seeing the input file, it doesn't seem so inelegant to me.
– Sparhawk
yesterday
I agree with Jeff, but also, if it works, it works. Without seeing the input file, it doesn't seem so inelegant to me.
– Sparhawk
yesterday
The sample line doesn't have 'Updated' in it, is there more to the line?
– user1794469
yesterday
The sample line doesn't have 'Updated' in it, is there more to the line?
– user1794469
yesterday
add a comment |
2 Answers
2
active
oldest
votes
If the date is first 10 characters, then you can use cut instead of the second grep
tail -n 1 | cut -c1-10
New contributor
add a comment |
I'd probably use awk
. Split fields at the T
in the datestamp, look for Updated
, and print the last occurrence.
awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current
You can interpolate that directly, or take the slightly more readable approach
#!/bin/bash
#
updated=$(awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current)
[[ -n "$updated" ]] && printf "Last system upgrade %sn" "$updated"
This definitely looks more elegant than the multiple greps + tail that I came up with. Think I'll go ahead and mark it as the best answer.
– MJiller
7 mins ago
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%2f496579%2fexcise-recent-date-from-log-file-output-as-motd%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
If the date is first 10 characters, then you can use cut instead of the second grep
tail -n 1 | cut -c1-10
New contributor
add a comment |
If the date is first 10 characters, then you can use cut instead of the second grep
tail -n 1 | cut -c1-10
New contributor
add a comment |
If the date is first 10 characters, then you can use cut instead of the second grep
tail -n 1 | cut -c1-10
New contributor
If the date is first 10 characters, then you can use cut instead of the second grep
tail -n 1 | cut -c1-10
New contributor
New contributor
answered yesterday
Ilia GilmijarowIlia Gilmijarow
1212
1212
New contributor
New contributor
add a comment |
add a comment |
I'd probably use awk
. Split fields at the T
in the datestamp, look for Updated
, and print the last occurrence.
awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current
You can interpolate that directly, or take the slightly more readable approach
#!/bin/bash
#
updated=$(awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current)
[[ -n "$updated" ]] && printf "Last system upgrade %sn" "$updated"
This definitely looks more elegant than the multiple greps + tail that I came up with. Think I'll go ahead and mark it as the best answer.
– MJiller
7 mins ago
add a comment |
I'd probably use awk
. Split fields at the T
in the datestamp, look for Updated
, and print the last occurrence.
awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current
You can interpolate that directly, or take the slightly more readable approach
#!/bin/bash
#
updated=$(awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current)
[[ -n "$updated" ]] && printf "Last system upgrade %sn" "$updated"
This definitely looks more elegant than the multiple greps + tail that I came up with. Think I'll go ahead and mark it as the best answer.
– MJiller
7 mins ago
add a comment |
I'd probably use awk
. Split fields at the T
in the datestamp, look for Updated
, and print the last occurrence.
awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current
You can interpolate that directly, or take the slightly more readable approach
#!/bin/bash
#
updated=$(awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current)
[[ -n "$updated" ]] && printf "Last system upgrade %sn" "$updated"
I'd probably use awk
. Split fields at the T
in the datestamp, look for Updated
, and print the last occurrence.
awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current
You can interpolate that directly, or take the slightly more readable approach
#!/bin/bash
#
updated=$(awk -FT '/Updated/ {date=$1} END {print date}' /var/log/socklog/xbps/current)
[[ -n "$updated" ]] && printf "Last system upgrade %sn" "$updated"
answered 15 hours ago
roaimaroaima
43.8k555118
43.8k555118
This definitely looks more elegant than the multiple greps + tail that I came up with. Think I'll go ahead and mark it as the best answer.
– MJiller
7 mins ago
add a comment |
This definitely looks more elegant than the multiple greps + tail that I came up with. Think I'll go ahead and mark it as the best answer.
– MJiller
7 mins ago
This definitely looks more elegant than the multiple greps + tail that I came up with. Think I'll go ahead and mark it as the best answer.
– MJiller
7 mins ago
This definitely looks more elegant than the multiple greps + tail that I came up with. Think I'll go ahead and mark it as the best answer.
– MJiller
7 mins ago
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.
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%2f496579%2fexcise-recent-date-from-log-file-output-as-motd%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
2
I think it'd help answerers to see sample lines from the input file
– Jeff Schaller
yesterday
I agree with Jeff, but also, if it works, it works. Without seeing the input file, it doesn't seem so inelegant to me.
– Sparhawk
yesterday
The sample line doesn't have 'Updated' in it, is there more to the line?
– user1794469
yesterday