how to capture specific strings from line The 2019 Stack Overflow Developer Survey Results Are InReordering strings in linuxhow to delete line from the XML filelinux + how to capture values from xml fileawk + count field separator in csv and print line numberawk + how to capture email address between characterslinux + how to find the unused disk on linuxcapture the second field and the last field from stringawk/sed/perl one liner to edit json fileHow to insert file content after a certain string in a file?How to append line with strings at the end of variable?
Extreme, unacceptable situation and I can't attend work tomorrow morning
How to make payment on the internet without leaving a money trail?
Limit the amount of RAM Mathematica may access?
Are USB sockets on wall outlets live all the time, even when the switch is off?
Landlord wants to switch my lease to a "Land contract" to "get back at the city"
Can the Protection from Evil and Good spell be used on the caster?
Understanding the implication of what "well-defined" means for the operation in quotient group
How was Skylab's orbit inclination chosen?
Where does the "burst of radiance" from Holy Weapon originate?
Realistic Alternatives to Dust: What Else Could Feed a Plankton Bloom?
Geography at the pixel level
Manuscript was "unsubmitted" because the manuscript was deposited in Arxiv Preprints
On the insanity of kings as an argument against monarchy
Pristine Bit Checking
What is the steepest angle that a canal can be traversable without locks?
Is three citations per paragraph excessive for undergraduate research paper?
The difference between dialogue marks
JSON.serialize: is it possible to suppress null values of a map?
Why is the maximum length of OpenWrt’s root password 8 characters?
Should I write numbers in words or as numerals when there are multiple next to each other?
How can I fix this gap between bookcases I made?
Why do UK politicians seemingly ignore opinion polls on Brexit?
Could a US political party gain complete control over the government by removing checks & balances?
Patience, young "Padovan"
how to capture specific strings from line
The 2019 Stack Overflow Developer Survey Results Are InReordering strings in linuxhow to delete line from the XML filelinux + how to capture values from xml fileawk + count field separator in csv and print line numberawk + how to capture email address between characterslinux + how to find the unused disk on linuxcapture the second field and the last field from stringawk/sed/perl one liner to edit json fileHow to insert file content after a certain string in a file?How to append line with strings at the end of variable?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","
expected output
sdb
sdc
sdd
sde
sdf
awk sed perl
add a comment |
How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","
expected output
sdb
sdc
sdd
sde
sdf
awk sed perl
You can get that output withprintf '%sn' sdb sdc sdd sde sdf
. If you want a more general answer, please explain what you want, in general. Do you want to extract thesdg
from/dev/sdg
, or only after/rid/
? What if the input containssd1
,sd17
, orsda17
? How aboutopen("/dev/sd#")
; would you wantsd#
(i.e., including the next character aftersd
, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?
– G-Man
Apr 6 at 15:56
This looks like it could be from a JSON file. Are you able to share a larger portion of the file?
– Kusalananda♦
2 days ago
add a comment |
How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","
expected output
sdb
sdc
sdd
sde
sdf
awk sed perl
How to capture only the sdX from the following line using bash, awk, sed or perl in one liner command?
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","
expected output
sdb
sdc
sdd
sde
sdf
awk sed perl
awk sed perl
edited 2 days ago
Prabhjot Singh
107213
107213
asked Dec 22 '17 at 9:48
yaelyael
2,81243079
2,81243079
You can get that output withprintf '%sn' sdb sdc sdd sde sdf
. If you want a more general answer, please explain what you want, in general. Do you want to extract thesdg
from/dev/sdg
, or only after/rid/
? What if the input containssd1
,sd17
, orsda17
? How aboutopen("/dev/sd#")
; would you wantsd#
(i.e., including the next character aftersd
, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?
– G-Man
Apr 6 at 15:56
This looks like it could be from a JSON file. Are you able to share a larger portion of the file?
– Kusalananda♦
2 days ago
add a comment |
You can get that output withprintf '%sn' sdb sdc sdd sde sdf
. If you want a more general answer, please explain what you want, in general. Do you want to extract thesdg
from/dev/sdg
, or only after/rid/
? What if the input containssd1
,sd17
, orsda17
? How aboutopen("/dev/sd#")
; would you wantsd#
(i.e., including the next character aftersd
, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?
– G-Man
Apr 6 at 15:56
This looks like it could be from a JSON file. Are you able to share a larger portion of the file?
– Kusalananda♦
2 days ago
You can get that output with
printf '%sn' sdb sdc sdd sde sdf
. If you want a more general answer, please explain what you want, in general. Do you want to extract the sdg
from /dev/sdg
, or only after /rid/
? What if the input contains sd1
, sd17
, or sda17
? How about open("/dev/sd#")
; would you want sd#
(i.e., including the next character after sd
, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?– G-Man
Apr 6 at 15:56
You can get that output with
printf '%sn' sdb sdc sdd sde sdf
. If you want a more general answer, please explain what you want, in general. Do you want to extract the sdg
from /dev/sdg
, or only after /rid/
? What if the input contains sd1
, sd17
, or sda17
? How about open("/dev/sd#")
; would you want sd#
(i.e., including the next character after sd
, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?– G-Man
Apr 6 at 15:56
This looks like it could be from a JSON file. Are you able to share a larger portion of the file?
– Kusalananda♦
2 days ago
This looks like it could be from a JSON file. Are you able to share a larger portion of the file?
– Kusalananda♦
2 days ago
add a comment |
6 Answers
6
active
oldest
votes
You can use GREP arguments:
-P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression
(PCRE). This is experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
So your command would be:
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
sdb
sdc
sdd
sde
sdf
1
Sorry, you talk about the option-P
and the you use-h
to hide the filename?grep
is (in this case) reading fromstdin
– FaxMax
Dec 22 '17 at 10:48
Corrected, wrong copy/paste. Thanks.
– Kevin Lemaire
Dec 22 '17 at 10:52
add a comment |
Use
echo ... | grep -Eo "sd[a-z]"
where -E
interprets the pattern as an (extended) regular expression and -o
prints only the matching parts in each line.
1
That’s not an extended regular expression; that command will work without theE
option.
– G-Man
Apr 6 at 14:29
add a comment |
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
sdb
sdc
sdd
sde
sdf
add a comment |
You did not specify what x
should be in sdX
so one could as well assume that it might be any character:
$ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
sdb
sdc
sdd
sde
sdf
A literal .
means any character in regular expressions.
And in perl
because you wanted that explicitly:
$ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
sdb
sdc
sdd
sde
sdf
add a comment |
gnu sed:
$ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
$ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'
I do not get it
– Pierre.Vriens
Apr 6 at 13:55
(1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked. (2) Your command produces the correct expected result for the sample input. So doesprintf '%sn' sdb sdc sdd sde sdf
. Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else. … (Cont’d)
– G-Man
Apr 6 at 15:28
(Cont’d) … My point is that the same is true of your answer. The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input. It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague. But you should state what assumptions you are making, especially when they are as broad as the ones you are making.
– G-Man
Apr 6 at 15:28
add a comment |
Above result is achieved by awk one liner
Done by below command
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
output
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
sdb
sdc
sdd
sde
sdf
praveen@praveen:~$
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%2f412456%2fhow-to-capture-specific-strings-from-line%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
6 Answers
6
active
oldest
votes
6 Answers
6
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use GREP arguments:
-P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression
(PCRE). This is experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
So your command would be:
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
sdb
sdc
sdd
sde
sdf
1
Sorry, you talk about the option-P
and the you use-h
to hide the filename?grep
is (in this case) reading fromstdin
– FaxMax
Dec 22 '17 at 10:48
Corrected, wrong copy/paste. Thanks.
– Kevin Lemaire
Dec 22 '17 at 10:52
add a comment |
You can use GREP arguments:
-P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression
(PCRE). This is experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
So your command would be:
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
sdb
sdc
sdd
sde
sdf
1
Sorry, you talk about the option-P
and the you use-h
to hide the filename?grep
is (in this case) reading fromstdin
– FaxMax
Dec 22 '17 at 10:48
Corrected, wrong copy/paste. Thanks.
– Kevin Lemaire
Dec 22 '17 at 10:52
add a comment |
You can use GREP arguments:
-P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression
(PCRE). This is experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
So your command would be:
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
sdb
sdc
sdd
sde
sdf
You can use GREP arguments:
-P, --perl-regexp
Interpret the pattern as a Perl-compatible regular expression
(PCRE). This is experimental and grep -P may warn of
unimplemented features.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
So your command would be:
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | grep -oP "w*sdw*"
sdb
sdc
sdd
sde
sdf
edited Dec 22 '17 at 11:04
answered Dec 22 '17 at 10:41
Kevin LemaireKevin Lemaire
1,181724
1,181724
1
Sorry, you talk about the option-P
and the you use-h
to hide the filename?grep
is (in this case) reading fromstdin
– FaxMax
Dec 22 '17 at 10:48
Corrected, wrong copy/paste. Thanks.
– Kevin Lemaire
Dec 22 '17 at 10:52
add a comment |
1
Sorry, you talk about the option-P
and the you use-h
to hide the filename?grep
is (in this case) reading fromstdin
– FaxMax
Dec 22 '17 at 10:48
Corrected, wrong copy/paste. Thanks.
– Kevin Lemaire
Dec 22 '17 at 10:52
1
1
Sorry, you talk about the option
-P
and the you use -h
to hide the filename? grep
is (in this case) reading from stdin
– FaxMax
Dec 22 '17 at 10:48
Sorry, you talk about the option
-P
and the you use -h
to hide the filename? grep
is (in this case) reading from stdin
– FaxMax
Dec 22 '17 at 10:48
Corrected, wrong copy/paste. Thanks.
– Kevin Lemaire
Dec 22 '17 at 10:52
Corrected, wrong copy/paste. Thanks.
– Kevin Lemaire
Dec 22 '17 at 10:52
add a comment |
Use
echo ... | grep -Eo "sd[a-z]"
where -E
interprets the pattern as an (extended) regular expression and -o
prints only the matching parts in each line.
1
That’s not an extended regular expression; that command will work without theE
option.
– G-Man
Apr 6 at 14:29
add a comment |
Use
echo ... | grep -Eo "sd[a-z]"
where -E
interprets the pattern as an (extended) regular expression and -o
prints only the matching parts in each line.
1
That’s not an extended regular expression; that command will work without theE
option.
– G-Man
Apr 6 at 14:29
add a comment |
Use
echo ... | grep -Eo "sd[a-z]"
where -E
interprets the pattern as an (extended) regular expression and -o
prints only the matching parts in each line.
Use
echo ... | grep -Eo "sd[a-z]"
where -E
interprets the pattern as an (extended) regular expression and -o
prints only the matching parts in each line.
answered Dec 22 '17 at 10:48
elmelm
1134
1134
1
That’s not an extended regular expression; that command will work without theE
option.
– G-Man
Apr 6 at 14:29
add a comment |
1
That’s not an extended regular expression; that command will work without theE
option.
– G-Man
Apr 6 at 14:29
1
1
That’s not an extended regular expression; that command will work without the
E
option.– G-Man
Apr 6 at 14:29
That’s not an extended regular expression; that command will work without the
E
option.– G-Man
Apr 6 at 14:29
add a comment |
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
sdb
sdc
sdd
sde
sdf
add a comment |
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
sdb
sdc
sdd
sde
sdf
add a comment |
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
sdb
sdc
sdd
sde
sdf
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",
echo '"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",' | grep -Po 'sdw'
sdb
sdc
sdd
sde
sdf
answered Dec 22 '17 at 10:37
FaxMaxFaxMax
443420
443420
add a comment |
add a comment |
You did not specify what x
should be in sdX
so one could as well assume that it might be any character:
$ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
sdb
sdc
sdd
sde
sdf
A literal .
means any character in regular expressions.
And in perl
because you wanted that explicitly:
$ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
sdb
sdc
sdd
sde
sdf
add a comment |
You did not specify what x
should be in sdX
so one could as well assume that it might be any character:
$ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
sdb
sdc
sdd
sde
sdf
A literal .
means any character in regular expressions.
And in perl
because you wanted that explicitly:
$ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
sdb
sdc
sdd
sde
sdf
add a comment |
You did not specify what x
should be in sdX
so one could as well assume that it might be any character:
$ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
sdb
sdc
sdd
sde
sdf
A literal .
means any character in regular expressions.
And in perl
because you wanted that explicitly:
$ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
sdb
sdc
sdd
sde
sdf
You did not specify what x
should be in sdX
so one could as well assume that it might be any character:
$ echo echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs /data"," | grep -o 'sd.'
sdb
sdc
sdd
sde
sdf
A literal .
means any character in regular expressions.
And in perl
because you wanted that explicitly:
$ echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data"," | perl -nE 'say $& while /sd./g'
sdb
sdc
sdd
sde
sdf
edited Dec 22 '17 at 12:15
answered Dec 22 '17 at 11:03
Arkadiusz DrabczykArkadiusz Drabczyk
8,33521836
8,33521836
add a comment |
add a comment |
gnu sed:
$ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
$ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'
I do not get it
– Pierre.Vriens
Apr 6 at 13:55
(1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked. (2) Your command produces the correct expected result for the sample input. So doesprintf '%sn' sdb sdc sdd sde sdf
. Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else. … (Cont’d)
– G-Man
Apr 6 at 15:28
(Cont’d) … My point is that the same is true of your answer. The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input. It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague. But you should state what assumptions you are making, especially when they are as broad as the ones you are making.
– G-Man
Apr 6 at 15:28
add a comment |
gnu sed:
$ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
$ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'
I do not get it
– Pierre.Vriens
Apr 6 at 13:55
(1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked. (2) Your command produces the correct expected result for the sample input. So doesprintf '%sn' sdb sdc sdd sde sdf
. Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else. … (Cont’d)
– G-Man
Apr 6 at 15:28
(Cont’d) … My point is that the same is true of your answer. The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input. It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague. But you should state what assumptions you are making, especially when they are as broad as the ones you are making.
– G-Man
Apr 6 at 15:28
add a comment |
gnu sed:
$ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
$ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'
gnu sed:
$ s='"dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data",'
$ echo $s| sed -E ':b;s~[^,:]+.,3/rid/(.+)~1~;Te;h;s~(w+)/.*~1~p;g;tb;:e d'
answered Apr 6 at 13:35
abdanabdan
474
474
I do not get it
– Pierre.Vriens
Apr 6 at 13:55
(1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked. (2) Your command produces the correct expected result for the sample input. So doesprintf '%sn' sdb sdc sdd sde sdf
. Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else. … (Cont’d)
– G-Man
Apr 6 at 15:28
(Cont’d) … My point is that the same is true of your answer. The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input. It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague. But you should state what assumptions you are making, especially when they are as broad as the ones you are making.
– G-Man
Apr 6 at 15:28
add a comment |
I do not get it
– Pierre.Vriens
Apr 6 at 13:55
(1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked. (2) Your command produces the correct expected result for the sample input. So doesprintf '%sn' sdb sdc sdd sde sdf
. Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else. … (Cont’d)
– G-Man
Apr 6 at 15:28
(Cont’d) … My point is that the same is true of your answer. The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input. It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague. But you should state what assumptions you are making, especially when they are as broad as the ones you are making.
– G-Man
Apr 6 at 15:28
I do not get it
– Pierre.Vriens
Apr 6 at 13:55
I do not get it
– Pierre.Vriens
Apr 6 at 13:55
(1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked. (2) Your command produces the correct expected result for the sample input. So does
printf '%sn' sdb sdc sdd sde sdf
. Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else. … (Cont’d)– G-Man
Apr 6 at 15:28
(1) You might not be able to tell from the previous answers to this question, but we prefer answers to explain how they work — especially when they’re as complicated as this one, and when they are added to a long list of other answers, long after the question was asked. (2) Your command produces the correct expected result for the sample input. So does
printf '%sn' sdb sdc sdd sde sdf
. Of course that wouldn’t be an acceptable answer; it would work only for the sample input, and essentially nothing else. … (Cont’d)– G-Man
Apr 6 at 15:28
(Cont’d) … My point is that the same is true of your answer. The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input. It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague. But you should state what assumptions you are making, especially when they are as broad as the ones you are making.
– G-Man
Apr 6 at 15:28
(Cont’d) … My point is that the same is true of your answer. The question says “capture only the sdX …”; you have made many assumptions about the input, in general, assuming that it will look very very much like the sample input. It is necessary to make some assumptions about what the questioner wants, because the question is terribly vague. But you should state what assumptions you are making, especially when they are as broad as the ones you are making.
– G-Man
Apr 6 at 15:28
add a comment |
Above result is achieved by awk one liner
Done by below command
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
output
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
sdb
sdc
sdd
sde
sdf
praveen@praveen:~$
add a comment |
Above result is achieved by awk one liner
Done by below command
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
output
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
sdb
sdc
sdd
sde
sdf
praveen@praveen:~$
add a comment |
Above result is achieved by awk one liner
Done by below command
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
output
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
sdb
sdc
sdd
sde
sdf
praveen@praveen:~$
Above result is achieved by awk one liner
Done by below command
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
output
echo ""dfs.datanode.data.dir" : "/rid/sdb/oo/hdfs/data,/rid/sdc/oo/hdfs/data,/rid/sdd/oo/hdfs/data,/rid/sde/oo/hdfs/data,/rid/sdf/oo/hdfs/data","|perl -pne "s/,/n/g"| sed '/^$/d'| awk -F "/" 'print $3'
sdb
sdc
sdd
sde
sdf
praveen@praveen:~$
answered 2 days ago
Praveen Kumar BSPraveen Kumar BS
1,7541311
1,7541311
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.
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%2f412456%2fhow-to-capture-specific-strings-from-line%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
You can get that output with
printf '%sn' sdb sdc sdd sde sdf
. If you want a more general answer, please explain what you want, in general. Do you want to extract thesdg
from/dev/sdg
, or only after/rid/
? What if the input containssd1
,sd17
, orsda17
? How aboutopen("/dev/sd#")
; would you wantsd#
(i.e., including the next character aftersd
, even if it’s not alphanumeric)? How about words like “disdain”, “wisdom”, “eavesdrop”, “transduce”, “jurisdiction”, “misdeed”, “Tuesday”, “Wednesday” and “Thursday” (which contain “sd”)? How about “freebsd” (which ends with “sd”)?– G-Man
Apr 6 at 15:56
This looks like it could be from a JSON file. Are you able to share a larger portion of the file?
– Kusalananda♦
2 days ago