【发布时间】:2018-01-20 03:21:59
【问题描述】:
这应该是一个相当简单的问题,答案也相对简单。
我正在尝试使用正则表达式来解析要稍微修改的输出。
我目前在脚本中将这段 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/... 开头的字符串,直到空格,然后是空格或逗号,然后是序列中找到的下一个字符串。 谢谢。对不起,如果我的问题写得不好。
【问题讨论】:
-
pretty simple question with a relatively simple answer所以可能已经被询问和回答了数千次。到目前为止,您尝试过什么? -
试试这个:\/dev(.*)\s
-
这很容易通过正确的输入和所需的输出来回答。在给定的输入中不清楚,如果路径总是以点、空格或其他东西结尾。
-
即使您有理由将您的 cmd 包含在
$(...)中(例如 var=$(cmd...)`),包含它也会分散您的 Q 注意力。保持简单并编辑您的 Q 向我们展示您的示例输入,从而创建您所需的示例输出。祝你好运。 -
如果你对 sed 有足够的了解,可以写
':a;N;$!ba;s/\n/ /g',那么你不需要问这个问题。我怀疑现实是你从别人那里得到了那个脚本,不知道它是如何做的,也不知道现在如何根据你的需要来增强它,那么你为什么要使用它呢?不管它在做什么,有一个更简单、更清晰的 awk 脚本可以做同样的事情,你可以自己增强它,所以也许可以寻求帮助。