Regex sed解析
我很难编写一行程序(并行sed命令)来解析以下字符串(可以在/proc/interrupts中看到) 字符串为:Regex sed解析,regex,sed,perl,Regex,Sed,Perl,我很难编写一行程序(并行sed命令)来解析以下字符串(可以在/proc/interrupts中看到) 字符串为: 69:0550 PCI-X以太网-1@XX 输出字符串应为: 69XX@eth-1 (如果颠倒顺序太复杂,甚至69 eth-1) 为了澄清,输入字符串格式为: %d:PCI-X以太网-%x@XX" 字符串PCI-X对我来说并不重要 eth-1可以是eth-2。。。eth-15 XX是我事先读过的字符串 请帮忙! 谢谢试试这个: echo '69: 0 0 55 0 PCI-X eth
69:0550 PCI-X以太网-1@XX
输出字符串应为:
69XX@eth-1
(如果颠倒顺序太复杂,甚至69 eth-1
)
为了澄清,输入字符串格式为:
%d:PCI-X以太网-%x@XX"
字符串PCI-X对我来说并不重要
eth-1可以是eth-2。。。eth-15
XX是我事先读过的字符串
请帮忙!
谢谢试试这个:
echo '69: 0 0 55 0 PCI-X eth-1@XX'|sed 's/^\(..\).*X \(.*\)@\(.*\)$/\1 \3@\2/g'
$ sed -re 's/^([^:]+):.*(eth-[[:xdigit:]]+)@(.+)$/\1 \3@\2/' <<< "69: 0 0 55 0 PCI-X eth-1@XX"
69 XX@eth-1
试试这个:
echo '69: 0 0 55 0 PCI-X eth-1@XX'|sed 's/^\(..\).*X \(.*\)@\(.*\)$/\1 \3@\2/g'
$ sed -re 's/^([^:]+):.*(eth-[[:xdigit:]]+)@(.+)$/\1 \3@\2/' <<< "69: 0 0 55 0 PCI-X eth-1@XX"
69 XX@eth-1
$sed-re的/^([^::]+):.*(eth-[:xdigit:]+)@(.+)$/\1\3@\2/”文件:
代码:
或与:
输出:
解释
^
断言字符串开头的位置
- 第一个捕获组(\d+)
- \d+匹配一个数字(等于[0-9])
+
量词-在一次和无限次之间进行匹配,尽可能多地匹配,根据需要返回(贪婪)
:
匹配字符:字面上(区分大小写)
*?
匹配任何字符(行终止符除外)
*?
量词-在零次和无限次之间进行匹配,匹配次数尽可能少,根据需要进行扩展(惰性)
- 第二捕获组(eth-\d+)
eth-
匹配字符eth-字面意义(区分大小写)
\d+
匹配一个数字(等于[0-9])
+
量词-在一次和无限次之间进行匹配,尽可能多地匹配,根据需要返回(贪婪)
@
逐字匹配字符@(区分大小写)
- 第三捕获组(\w+)
\w+
匹配任何单词字符(等于[a-zA-Z0-9])
+
量词-在一次和无限次之间进行匹配,尽可能多地匹配,根据需要返回(贪婪)
从可以测试正则表达式的地方复制的说明可以使用以下模式:
^([0-9]+).*(eth-[0-9]+)@([A-Z]{2})
^
断言行的起始位置
([0-9]+)
捕获组1。匹配数字李>
*
贪婪地匹配任何东西
(eth-[0-9]+)
捕获第2组。匹配子字符串eth-
,后跟数字
@
匹配@
([A-Z]{2})
捕获组3。匹配两个大写字母
替换为:
\1 \3@\2
正则表达式演示
sed演示版:
$ echo '69: 0 0 55 0 PCI-X eth-1@XX' | sed -E 's/^([0-9]+).*(eth-[0-9]+)@([A-Z]{2})/\1 \3@\2/g'
69 XX@eth-1
使用awk:
echo '69: 0 0 55 0 PCI-X eth-1@XX' | awk -F '[: @]' '{print $1,$NF "@" $(NF-1)}'
使用:
、空格和@
作为字段分隔符<代码>$NF
是最后一列
输出:
69 XX@eth-1
69XX@eth-1
您可以对
[0-9a-fA-F]
使用[:xdigit:][/code>。谢谢!跟进问题。我可以从eth-X中减去1吗?(意思是,E-5将是同一个班轮上的EY-4。不,据我所知,你不能单独使用SED。你也需要使用AWK。如果你发现它有用,现在你有足够的声望,谢谢。请避免给我这个代码。“问题。显示您正在处理的脚本并说明问题所在。另请参见
echo '69: 0 0 55 0 PCI-X eth-1@XX' | awk -F '[: @]' '{print $1,$NF "@" $(NF-1)}'
69 XX@eth-1