2017-08-11 66 views
-2

这应该是一个相对简单的问题,相对简单的答案。Bash输出无空格字符串和斜杠的正则表达式

我想使用正则表达式来分析输出稍作修改。

我有此位的bash的代码作为一个变量在当前的脚本:

$(/usr/bin/csvstat /home/icgwfrpa/Scripts/test.csv | sed -r 's/,/;/g' | sed ':a;N;$!ba;s/\n/ /g') 

这个变量返回为:

1. date  <type 'datetime.datetime'> Nulls: False Min: 2017-06-26 18:00:01 Max: 2017-07-14 12:00:01 Unique values: 425 
2. diskusage1 <type 'int'> Nulls: False Values: 26; 27; 28; 29 
3. partition1 <type 'unicode'> Nulls: False Values: /dev/mapper/rootvg-lv_root 
4. diskusage2 <type 'int'> Nulls: False Values: 30 
5. partition2 <type 'unicode'> Nulls: False Values: /dev/sda1 Row count: 425 

这是伟大的。

现在我希望从现在这个变量剥离一切除了像/dev/mapper/rootvg-lv_root/dev/sda1(或其他任何类似与/dev/*开始,如果它在这个输出显示出来)的字符串。我不确定转义字符是如何在正斜杠的斜杠中工作的,所以帮助将不胜感激。为了澄清,我希望的输出应该是以/ dev/...开头的字符串,直到空格,然后是空格或逗号,然后是序列中找到的下一个字符串。 谢谢。对不起,如果我的问题写得不好。

+2

'相当简单的问题与一个相对简单的答案',因此可能已经答案和回答数千次。你试过什么了? –

+0

试试这个:\ dev(。*)\ s – msalperen

+1

这很容易回答正确的输入和所需的输出。在给定的输入中,如果一个路径总是以点,空间或其他东西结尾,那么不清楚。 –

回答

1

假设/dev/路径仅在一条线上出现一次...

 
$sed -r '/dev/!d;s#^.*(/dev/[^ ]*)\b.*#\1#' dev.txt 
/dev/mapper/rootvg-lv_root 
/dev/sda1 
  • /dev/!d - 删除线而没有dev
  • s#^.*(/dev/[^ ]*)\b.*#\1#使用s###而非s////dev/[^ ]*(的/ dev /随后通过非空格字符,则\b一个字的边界替换为\1,第一个捕获组。使用sed -rsed -E以允许捕获组伙伴转义。
+0

sed:-e表达式#1,字符6:未知命令:'\' –

+0

它是sed,而不是awk。是的,大多数炮弹不需要轰炸。固定。 – stevesliva

相关问题