这应该是一个非常简单的问题,答案相对简单。
我正在尝试使用正则表达式来解析要稍作修改的输出。
我目前在脚本中有这段 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/
路径在一行中只出现一次...
/[^ ]*(\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 -r
或sed -E
允许对捕获组括号进行取消转义。