2

このbashスクリプトは、grepの結果から先頭の空白を削除することになっています。

#!/bin/bash
grep --color=always $@ | sed -r -e's/:[[:space:]]*/:/'

しかし、それは空白と一致しません。置換テキストを「-」に変更すると、出力に表示されますが、空白が削除されることはありません。「*」を付けずに、「*」をエスケープして、「+」を付けて試してみましたが、何も機能しません。誰かがなぜそうしないのか知っていますか?

(Ubuntu 12.04でsedバージョン4.2.1を使用しています。)


おかげさまで、これは私の変更したスクリプトであり、grepの色を表示し、先頭の空白をトリミングします。

#!/bin/bash
grep --color=always $@ | sed -r -e's/[[:space:]]+//'
4

4 に答える 4

6

これを機能させるには、-colorオプションを削除する必要があります。カラーコードはsedを混乱させます:

grep  $@ | sed -r -e's/:[[:space:]]*/:/'
于 2012-09-07T19:50:31.117 に答える
2

によって出力される色情報grepは、特殊文字シーケンスの形式を取ります(このStackOverflowの質問への回答を参照)。したがって、コロンが色付けされ、空白が色付けされていない場合、またはその逆の場合、これらの文字シーケンスの1つが間にあることを意味します。それらは、sed隣接する文字としては表示されません。

于 2012-09-07T19:55:47.897 に答える
0
grep --color=always $@ |sed 's/^ //g'

先頭の空白を削除します。

于 2012-09-07T19:52:01.487 に答える
0

文字クラス\sは、空白文字と一致し、

例えば:

$ sed -e "s/\s\{3,\}/  /g" inputFile

少なくとも3つの空白のすべてのシーケンスを2つのスペースに置き換えます。

于 2012-09-07T19:48:47.297 に答える