2016-06-01 6 views
0

私はこのテーブルの数字の後にタブを削除しようとしています。私はコマンドラインからフォーマットしています。以下は、問題のファイルから直接coipiedと貼り付け元のテーブルのデータを、次のとおりです。`sed`を使った不思議な動作

File Path     Line Description 
/home/nick/.bashrc    9   # TODO  Chop this into code import files 
/home/nick/.bashrc   204   # TODO  Add $HOME/os-setup to OS installation disc 
/home/nick/.bashrc   207   # TODO  Custom power actions don't work; system tray notifications 

パイプに、最終的なsedコマンドを追加する場合はしかし、いくつかの奇妙な動作が発生します。次に、正規表現の最初の部分との一致を置き換え、

cat somefile.txt | column -tx -s : | sed -e 's/\([0-9]\{1,\}\)/\1/g' 
File Path     Line Description 
/home/nick/.bashrc    9   # TODO  Chop this into code import files 
/home/nick/.bashrc   204   # TODO  Add $HOME/os-setup to OS installation disc 
/home/nick/.bashrc   207   # TODO  Custom power actions don't work; system tray notifications 

これは表の各列の番号を検出します。例として、以下sedコマンドを考えます。マッチ全体が中括弧で囲まれているので、これはそれ自体で置き換えられて何も変わらないことを意味します。私はその後、同じsedコマンドを実行してください、私はsed出力も数試合を切り捨てるように思わ一致する正規表現に\t文字、リテラルのタブを追加、しかし

、!以下を参照してください:

cat somefile.txt | column -tx -s : | sed -e 's/\([0-9]\{1,\}\)\t/\1/g' 
File Path     Line Description 
/home/nick/.bashrc    # TODO  Chop this into code import files 
/home/nick/.bashrc   20 # TODO  Add $HOME/os-setup to OS installation disc 
/home/nick/.bashrc   20 # TODO  Custom power actions don't work; system tray notifications 

なぜsedは、各番号から最後の桁を切り捨てていますか? sedさんはこれをどうやって止めることができますか?

+0

\ tでsedコードを表示してください。 –

+0

興味深い、再現できない –

+0

@NickBull:ファイルはどこから来たのですか? – sjsam

答えて

1

数字の後のタブを削除する代わりに、# TODOより前のスペースを削除します。

AWK(GNU)溶液

awk '{print gensub(/[ ]+( # TODO)/,"\\1","g",$0)} ' file 

SED溶液

sed -E 's/[ ]+# TODO/ # TODO/' file 

出力

File Path     Line Description 
/home/nick/.bashrc    9 # TODO  Chop this into code import files 
/home/nick/.bashrc   204 # TODO  Add $HOME/os-setup to OS installation disc 
/home/nick/.bashrc   207 # TODO  Custom power actions don't work; system tray notification 

仮定

説明は常にあなたが選択に# TODO前のスペースの所望の数を置いてもよい# TODO

で始まります。私は2つを置く。

関連する問題