3

私は変換しようとしています:

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

2928: 0-3 --> 0

現時点では、適切に機能する次の変換があります。

正規表現:pid 出力:2928's current affinity list: 0-3 2928's new affinity list: 0

正規表現:'s current affinity list 出力:2928: 0-3 2928's new affinity list: 0

そして、適切に機能していない最後の正規表現は次のとおりです。

正規表現:(\d+)(.)(.)(.)((?:[a-z][a-z]+))(\s+)((?:[a-z][a-z]+))(\s+)((?:[a-z][a-z]+))出力:2928: 0-3 2928's new affinity list: 0

ご覧のとおり、正規表現が正しく適用されていません。この正規表現をオンライン テスターでテストすると、削除に適した領域が選択されていることがわかります。

完全なコマンド:

echo "pid 2928's current affinity list: 0-3 pid 2928's new affinity list: 0" | sed -e "s/pid //g" -e "s/'s current affinity list//g" -e "s/(\d+)(.)(.)(.)((?:[a-z][a-z]+))(\s+)((?:[a-z][a-z]+))(\s+)((?:[a-z][a-z]+))/-->/gim"

-esedの3番目で正規表現を正しく実行してはいけません。これは何か間違っているように見えますか?

4

4 に答える 4

3

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}'
于 2013-07-24T17:55:56.820 に答える
2

非純粋な 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}'
于 2013-07-24T17:58:55.443 に答える
1

根本的な質問には答えないかもしれませんが、これはあなたのタスクに対する迅速で汚い解決策です:

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

これは、予測可能なフィールド 2、6、および 12 (空白で区切られている) に依存することに注意してください。

于 2013-07-24T18:00:32.583 に答える