Regex 无空格字符串和斜杠的Bash输出正则表达式
这应该是一个非常简单的问题,并有一个相对简单的答案 我试图使用正则表达式来解析要稍微修改的输出 我目前在脚本中有一段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-
$(/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不需要“砰”转义。修复。