www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to use xargs to remove whitespaces (Dub executable path)

reply Andre Pany <andre s-e-a-p.de> writes:
Hi,

I try to get the executable path from a dub package using this 
command:

dub describe dscanner --data=target-path,target-name --data-list 
| xargs

But the output always contains a space between target-path and 
target-name:
/home/user/.dub/packages/dscanner-0.8.0/dscanner/bin/ dscanner

How can I get the full path without a space on a debian system in 
a 1 liner?

Kind regards
André
Sep 03 2019
next sibling parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Wed, Sep 04, 2019 at 05:52:12AM +0000, Andre Pany via Digitalmars-d-learn
wrote:
 Hi,
 
 I try to get the executable path from a dub package using this command:
 
 dub describe dscanner --data=target-path,target-name --data-list | xargs
 
 But the output always contains a space between target-path and target-name:
 /home/user/.dub/packages/dscanner-0.8.0/dscanner/bin/ dscanner
 
 How can I get the full path without a space on a debian system in a 1 liner?
[...] Try: ... | sed -e's g' T -- Elegant or ugly code as well as fine or rude sentences have something in common: they don't depend on the language. -- Luca De Vitis
Sep 03 2019
parent reply Andre Pany <andre s-e-a-p.de> writes:
On Wednesday, 4 September 2019 at 06:40:13 UTC, H. S. Teoh wrote:
 On Wed, Sep 04, 2019 at 05:52:12AM +0000, Andre Pany via 
 Digitalmars-d-learn wrote:
 Hi,
 
 I try to get the executable path from a dub package using this 
 command:
 
 dub describe dscanner --data=target-path,target-name 
 --data-list | xargs
 
 But the output always contains a space between target-path and 
 target-name: 
 /home/user/.dub/packages/dscanner-0.8.0/dscanner/bin/ dscanner
 
 How can I get the full path without a space on a debian system 
 in a 1 liner?
[...] Try: ... | sed -e's g' T
Thanks a lot. Works fine:) dub describe dscanner --data=target-path,target-name --data-list | xargs | sed -e's g' Kind regards André
Sep 04 2019
parent Les De Ridder <les lesderid.net> writes:
On Wednesday, 4 September 2019 at 08:23:19 UTC, Andre Pany wrote:
 On Wednesday, 4 September 2019 at 06:40:13 UTC, H. S. Teoh 
 wrote:
 On Wed, Sep 04, 2019 at 05:52:12AM +0000, Andre Pany via 
 Digitalmars-d-learn wrote:
 Hi,
 
 I try to get the executable path from a dub package using 
 this command:
 
 dub describe dscanner --data=target-path,target-name 
 --data-list | xargs
 
 But the output always contains a space between target-path 
 and target-name: 
 /home/user/.dub/packages/dscanner-0.8.0/dscanner/bin/ dscanner
 
 How can I get the full path without a space on a debian 
 system in a 1 liner?
[...] Try: ... | sed -e's g' T
Thanks a lot. Works fine:) dub describe dscanner --data=target-path,target-name --data-list | xargs | sed -e's g'
It's better to only replace the last occurrence, so it won't break on paths containing spaces: ... | sed 's/\(.*\) /\1/' There should probably just be a switch to use NUL characters as the delimiter though.
Sep 04 2019
prev sibling parent reply Sebastiaan Koppe <mail skoppe.eu> writes:
On Wednesday, 4 September 2019 at 05:52:12 UTC, Andre Pany wrote:
 Hi,

 I try to get the executable path from a dub package using this 
 command:

 dub describe dscanner --data=target-path,target-name 
 --data-list | xargs

 But the output always contains a space between target-path and 
 target-name:
 /home/user/.dub/packages/dscanner-0.8.0/dscanner/bin/ dscanner

 How can I get the full path without a space on a debian system 
 in a 1 liner?

 Kind regards
 André
What about this? dub describe scanner --data=target-path,target-name --data-list --data-0 | tr -d '\0' or if you have jq installed: dub describe dscanner | jq '.targets[0].buildSettings | "\(.targetPath)/\(.targetName)"'
Sep 04 2019
parent Andre Pany <andre s-e-a-p.de> writes:
On Wednesday, 4 September 2019 at 10:34:28 UTC, Sebastiaan Koppe 
wrote:
 On Wednesday, 4 September 2019 at 05:52:12 UTC, Andre Pany 
 wrote:
 Hi,

 I try to get the executable path from a dub package using this 
 command:

 dub describe dscanner --data=target-path,target-name 
 --data-list | xargs

 But the output always contains a space between target-path and 
 target-name:
 /home/user/.dub/packages/dscanner-0.8.0/dscanner/bin/ dscanner

 How can I get the full path without a space on a debian system 
 in a 1 liner?

 Kind regards
 André
What about this? dub describe scanner --data=target-path,target-name --data-list --data-0 | tr -d '\0' or if you have jq installed: dub describe dscanner | jq '.targets[0].buildSettings | "\(.targetPath)/\(.targetName)"'
Thanks to all! Yes replacing spaces with NUL really makes sense. Kind regards André
Sep 04 2019