2016-07-11 4 views
-2

リンクがあるファイルがあります。リンクはコメントアウトされています。私は、特定の文字列を検索し、その後、次の10行の最初の文字を削除するには、sedまたはawkを使用したいと思います。sedで行を検索し、次の10行の最初の文字を削除します。

私の知る限りでは、私はAWKで

sed -n '/StringToSearchFor/p' file 

私は、次の

awk '/pattern/ {print $1}' 

を書くだろうが、どのように私はの最初の文字を削除することができ、次のようにsedをして検索することができます10行に続いて?

sedとawkのマニュアルページは巨大です。だから、私のための検索文字列があるのとは別に、それらを指さないでください。

ありがとうございます。救助へ

+6

'sedとawkのマニュアルページは本当に巨大ではありません。 – 123

+0

はい、ちょうど2000年以上のライン、まったく巨大です – kartoffel

+2

Sedは空白行なしの177ラインです。 awkは1365です。両方とも一緒に読むのは10分足らずです... – 123

答えて

0

あなたはこのawkを使用することができます:

awk -v s='StringToSearchFor' '$0 ~ s{n=NR} NR<=n+10{$0 = substr($0, 2)} 1' file 
+0

は私のためには機能しません。それはawkの代わりにgawkに関連する可能性がありますか? – kartoffel

+0

いいえ、それはうまくBSDのawkを使用して動作します。問題のサンプル入力を含めれば、ideone.comの作業デモを提供することができます – anubhava

0

たPerl:

perl -pe 's/^.// if $l > 0 && $l--; $l = 10 if /StringToSearchFor/' 
  • $lから最初の文字を削除する行数を保持します。検索パターンが出現する度に10に設定されます。
  • $l > 0)から最初の文字を削除する行がまだ残っている場合は削除され、行数が減少します($l--)。
  • s/^.//は、最初の文字を削除するだけです。 substr $_, 0, 1, q()を使用する方が速いかもしれません。
0

これを試してみてください。

awk '/pattern/ { p=11 } 
    p && p-- <= 10 { print substr($0, 2); next } 
    1' 

パターンが表示されたら、pと設定します。 pが設定されているがそれより小さい場合、すなわち10個の後続の行では、部分文字列を出力する。それ以外の場合、1は、他のすべての行をすべて印刷するための短縮形です。 nextは、次の入力行でAwkを開始します。

0

下記の太いsedバージョンがあります。それは彼らの最初の文字なしのパターンと以下の10行にマッチ線を印刷し、そして終了:

sed -n '/StringToSearchFor/{p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;n;s/^.\(.*\)$/\1/p;q}' java0.log 

/StringToSearchFor/{ ... }:現在行が正規表現と一致したときに実行するコマンドのブロックを定義します。

  • p

    sedコマンドが文字であるパターンスペースを空にし、

  • s/^.\(.*\)$/\1/p次の行に読み取る:現在行(パターンスペース)sed -n
  • nを印刷するすべての文字を印刷します最初のものを除いて。
  • q
  • は:彼らの最初の文字なしの10行を表示:10回 n;s/^.\(.*\)$/\1/pが使用

を終了します。

+0

GNU sedを使用すると、 '+ N '形式のアドレスを使用して簡単にすることができます:'/StringToSearchFor /、+ 10 {// !s /^.//} 'など –

0

awk

awk 'p&&p--{sub(/^./,"")} /pattern/{p=10} 1' file 

パターン次の10行の最初の文字を削除します。

+0

アンカーは必要ありません。左から右に一致します。 – 123

+0

はい、本当に不要です。 – karakfa

関連する問題