Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 无空格字符串和斜杠的Bash输出正则表达式_Regex_Bash_Unicode_Sed - Fatal编程技术网

Regex 无空格字符串和斜杠的Bash输出正则表达式

Regex 无空格字符串和斜杠的Bash输出正则表达式,regex,bash,unicode,sed,Regex,Bash,Unicode,Sed,这应该是一个非常简单的问题,并有一个相对简单的答案 我试图使用正则表达式来解析要稍微修改的输出 我目前在脚本中有一段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-

这应该是一个非常简单的问题,并有一个相对简单的答案

我试图使用正则表达式来解析要稍微修改的输出

我目前在脚本中有一段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
1。日期空值:假最小值:2017-06-26 18:00:01最大值:2017-07-14 12:00:01唯一值:425
2.diskusage1空值:假值:26;27; 28; 29
3.分区1空值:假值:/dev/mapper/rootvg-lv\u root
4.diskusage2空值:假值:30
5.分区2空值:假值:/dev/sda1行计数:425
这很好

我现在想从这个变量中删除所有内容,除了像
/dev/mapper/rootvg-lv_root
/dev/sda1
(或者任何类似的以
/dev/*
开头的字符串,如果它出现在这个输出中)。我不知道转义字符在带有斜杠的正则表达式中是如何工作的,所以我们非常感谢您的帮助

为了澄清,我想要的输出应该是以/dev/…开头的字符串。。。直到空格,后跟空格或逗号,后跟序列中找到的下一个字符串。
谢谢如果我的问题写得不好,很抱歉。

假设路径在一行中只出现一次

$sed -r '/dev/!d;s#^.*(/dev/[^ ]*)\b.*#\1#' dev.txt /dev/mapper/rootvg-lv_root /dev/sda1 $sed-r'/dev/!Ds#^.*(/dev/[^]*)\b.*\1#'dev.txt /dev/mapper/rootvg-lv_root /开发/标准数据集1
  • /dev/!d
    -删除不带
    dev的行
  • s#^.*(/dev/[^]*)\b.*\1#
    使用
    s##
    而不是
    s///
    /dev/[^]*
    (/dev/后跟非空格字符,然后是
    \b
    一个单词边界。替换为
    \1
    ,第一个捕获组
  • 使用
    sed-r
    sed-E
    可以取消捕获组参数

非常简单的问题,答案相对简单
因此可能已经回答了数千次。到目前为止,您尝试了什么?试试这个:\/dev(.*)\这很容易用正确的输入和所需的输出来回答。在给定的输入中,路径是否总是以点、空格或其他东西结尾并不清楚。即使您有理由将cmd括在
$(…)
(如var=$(cmd…')),它会分散你的Q的注意力。保持简单,编辑你的Q,向我们展示你的示例输入,从而创建你所需的示例输出。好家伙。如果你对sed足够了解,可以编写
:a;N;$!ba;s/\N//g'
,那么你不应该问这个问题。我怀疑现实是你从其他人那里得到了该脚本,没有idea它是如何做的,无论它正在做什么,也不知道如何增强它以满足您的需要,那么为什么您现在要使用它?无论它正在做什么,有一个更简单、更清晰的awk脚本可以做同样的事情,您可以自己增强它,因此可以请求帮助。它是sed,而不是awk。是的,大多数shell不需要“砰”转义。修复。