Regex Sed正则表达式发行

Regex Sed正则表达式发行,regex,bash,sed,Regex,Bash,Sed,我正在尝试转换: pid 2928's current affinity list: 0-3 pid 2928's new affinity list: 0 到 目前,我有以下正确工作的转换: 正则表达式:pid 输出:2928的当前关联列表:0-3 2928的新关联列表:0 正则表达式:的当前关联列表 输出:2928:0-3 2928的新关联列表:0 然后是最终的正则表达式,它工作不正常: 正则表达式:(\d+)(((?:[a-z][a-z]+)(\s+)((?:[a-z][a-z]+)(

我正在尝试转换:

 pid 2928's current affinity list: 0-3 pid 2928's new affinity list: 0

目前,我有以下正确工作的转换:

正则表达式:
pid
输出:
2928的当前关联列表:0-3 2928的新关联列表:0

正则表达式:
的当前关联列表
输出:
2928:0-3 2928的新关联列表:0

然后是最终的正则表达式,它工作不正常:

正则表达式:
(\d+)(((?:[a-z][a-z]+)(\s+)((?:[a-z][a-z]+)(\s+)((?:[a-z][a-z]+)
输出:
2928:0-32928的新关联列表:0

正如您所看到的,它没有正确地应用正则表达式。如果您在在线测试仪中测试这个正则表达式,您可以看到它确实选择了正确的删除区域

完全命令:

echo“pid 2928的当前关联列表:0-3 pid 2928的新关联列表:0”| sed-e“s/pid//g”-e“s/”的当前关联列表//g“-e”s/(\d+)()((?:[a-z][a-z]+)(\s+)(\s+((?:[a-z][a-z]+))/-->/gim


我一定没有在sed的第三个
-e
中正确执行正则表达式。
这看起来有什么错误吗?

这里使用awk更简单:

awk -F "[ ']" '{ print $2 ": " $7 " --> " $14}'
所有线路:

echo "pid 2928's current affinity list: 0-3 pid 2928's new affinity list: 0" | awk -F "[ ']" '{ print $2 ": " $7 " --> " $14}'

如果您对非纯sed解决方案感兴趣,但对更简单的解决方案感兴趣,这里有一个混合sed和awk解决方案:

echo  "pid 2928's current affinity list: 0-3 pid 2928's new affinity list: 0"|sed "s/[a-z']//g"|awk '{print $1 ": " $3 " --> " $6}'

下面是一个快速而肮脏的任务解决方案,尽管它可能无法回答您的潜在问题:

awk '{print $2" "$6" --> "$12}' | sed 's/.s/:/'

请注意,这取决于字段2、6和12(由空格分隔)是否可预测。

问题在于您使用的perl正则表达式功能(
\d
\s
)未被sed识别:

sed 's/pid \([0-9]\+\)'\''s current affinity list: \([0-9]\+-[0-9]\+\) pid [0-9]\+'\''s new affinity list: /\1: \2 --> /'

awk答案显然更容易维护。

很抱歉,这实际上似乎输出了所需的输出。我以前测试过它,但它没有正常工作,但现在尝试它可以得到所需的输出。对不起,打扰了你。@ChristianStewart:对不起,今晚我很紧张。
sed 's/pid \([0-9]\+\)'\''s current affinity list: \([0-9]\+-[0-9]\+\) pid [0-9]\+'\''s new affinity list: /\1: \2 --> /'