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/...直到空格,后跟空格或逗号,后跟序列中找到的下一个字符串。 谢谢。对不起,如果我的问题写得不好。

假设/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允许对捕获组括号进行取消转义。

最新更新