How to use grep to get the matching part only, without introducing extra newlines
Clash Royale CLAN TAG#URR8PPP
up vote
0
down vote
favorite
I have a output from a command that I want to pipe to some kind of grep command to obtain the part in each line that matches a given regex, and only output the matching part, without introducing newlines
I know grep -o
can do something quite similar but it generates a newline for each match, and the output of my command also contains many new lines.
Example:
input(output of my command):
banana apple banana
apple bananas banned
regex:
ban[a-z]*
output by grep -o
:
banana
banana
bananas
banned
expected output:
bananabanana
bananasbanned
One thing I can come up with is to use tr
to replace newline character to some character that is unlikely to appear in the output of the command, feed the output to grep -o
, and then use tr
to get back the newline.
mycommand|tr 'n' @|grep -o regex|tr -d 'n'|tr @ 'n'
However I suppose there should be some better solutions. Any help would be appreciated.
bash text-processing
add a comment |Â
up vote
0
down vote
favorite
I have a output from a command that I want to pipe to some kind of grep command to obtain the part in each line that matches a given regex, and only output the matching part, without introducing newlines
I know grep -o
can do something quite similar but it generates a newline for each match, and the output of my command also contains many new lines.
Example:
input(output of my command):
banana apple banana
apple bananas banned
regex:
ban[a-z]*
output by grep -o
:
banana
banana
bananas
banned
expected output:
bananabanana
bananasbanned
One thing I can come up with is to use tr
to replace newline character to some character that is unlikely to appear in the output of the command, feed the output to grep -o
, and then use tr
to get back the newline.
mycommand|tr 'n' @|grep -o regex|tr -d 'n'|tr @ 'n'
However I suppose there should be some better solutions. Any help would be appreciated.
bash text-processing
Are you open to solutions using other tools - such asperl
?
â steeldriver
Dec 7 '17 at 2:51
@steeldriver Yes, I am open to options using other tools though personally I prefer GNU tools. I am not sure about the efficiency but can I assume thatperl
performs as good as GNUgrep
,sed
, etc.?
â Weijun Zhou
Dec 7 '17 at 3:19
add a comment |Â
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a output from a command that I want to pipe to some kind of grep command to obtain the part in each line that matches a given regex, and only output the matching part, without introducing newlines
I know grep -o
can do something quite similar but it generates a newline for each match, and the output of my command also contains many new lines.
Example:
input(output of my command):
banana apple banana
apple bananas banned
regex:
ban[a-z]*
output by grep -o
:
banana
banana
bananas
banned
expected output:
bananabanana
bananasbanned
One thing I can come up with is to use tr
to replace newline character to some character that is unlikely to appear in the output of the command, feed the output to grep -o
, and then use tr
to get back the newline.
mycommand|tr 'n' @|grep -o regex|tr -d 'n'|tr @ 'n'
However I suppose there should be some better solutions. Any help would be appreciated.
bash text-processing
I have a output from a command that I want to pipe to some kind of grep command to obtain the part in each line that matches a given regex, and only output the matching part, without introducing newlines
I know grep -o
can do something quite similar but it generates a newline for each match, and the output of my command also contains many new lines.
Example:
input(output of my command):
banana apple banana
apple bananas banned
regex:
ban[a-z]*
output by grep -o
:
banana
banana
bananas
banned
expected output:
bananabanana
bananasbanned
One thing I can come up with is to use tr
to replace newline character to some character that is unlikely to appear in the output of the command, feed the output to grep -o
, and then use tr
to get back the newline.
mycommand|tr 'n' @|grep -o regex|tr -d 'n'|tr @ 'n'
However I suppose there should be some better solutions. Any help would be appreciated.
bash text-processing
edited Dec 7 '17 at 2:29
asked Dec 7 '17 at 2:24
Weijun Zhou
1,434119
1,434119
Are you open to solutions using other tools - such asperl
?
â steeldriver
Dec 7 '17 at 2:51
@steeldriver Yes, I am open to options using other tools though personally I prefer GNU tools. I am not sure about the efficiency but can I assume thatperl
performs as good as GNUgrep
,sed
, etc.?
â Weijun Zhou
Dec 7 '17 at 3:19
add a comment |Â
Are you open to solutions using other tools - such asperl
?
â steeldriver
Dec 7 '17 at 2:51
@steeldriver Yes, I am open to options using other tools though personally I prefer GNU tools. I am not sure about the efficiency but can I assume thatperl
performs as good as GNUgrep
,sed
, etc.?
â Weijun Zhou
Dec 7 '17 at 3:19
Are you open to solutions using other tools - such as
perl
?â steeldriver
Dec 7 '17 at 2:51
Are you open to solutions using other tools - such as
perl
?â steeldriver
Dec 7 '17 at 2:51
@steeldriver Yes, I am open to options using other tools though personally I prefer GNU tools. I am not sure about the efficiency but can I assume that
perl
performs as good as GNU grep
, sed
, etc.?â Weijun Zhou
Dec 7 '17 at 3:19
@steeldriver Yes, I am open to options using other tools though personally I prefer GNU tools. I am not sure about the efficiency but can I assume that
perl
performs as good as GNU grep
, sed
, etc.?â Weijun Zhou
Dec 7 '17 at 3:19
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
If you don't mind using perl
:
mycommand | perl -lne 'print join "", /ban[a-z]*/g'
The matches on each line are returned in a list context, which you can join with an empty delimiter.
add a comment |Â
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
If you don't mind using perl
:
mycommand | perl -lne 'print join "", /ban[a-z]*/g'
The matches on each line are returned in a list context, which you can join with an empty delimiter.
add a comment |Â
up vote
2
down vote
accepted
If you don't mind using perl
:
mycommand | perl -lne 'print join "", /ban[a-z]*/g'
The matches on each line are returned in a list context, which you can join with an empty delimiter.
add a comment |Â
up vote
2
down vote
accepted
up vote
2
down vote
accepted
If you don't mind using perl
:
mycommand | perl -lne 'print join "", /ban[a-z]*/g'
The matches on each line are returned in a list context, which you can join with an empty delimiter.
If you don't mind using perl
:
mycommand | perl -lne 'print join "", /ban[a-z]*/g'
The matches on each line are returned in a list context, which you can join with an empty delimiter.
answered Dec 7 '17 at 3:39
steeldriver
31.8k34979
31.8k34979
add a comment |Â
add a comment |Â
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
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f409355%2fhow-to-use-grep-to-get-the-matching-part-only-without-introducing-extra-newline%23new-answer', 'question_page');
);
Post as a guest
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
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
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
Are you open to solutions using other tools - such as
perl
?â steeldriver
Dec 7 '17 at 2:51
@steeldriver Yes, I am open to options using other tools though personally I prefer GNU tools. I am not sure about the efficiency but can I assume that
perl
performs as good as GNUgrep
,sed
, etc.?â Weijun Zhou
Dec 7 '17 at 3:19