「sedの」高度な機能:私の小さな頭の周りのほとんどめまい

sedコマンドは、2つのスペースがあり、一つはホールドスペースと呼ばれる、パターンスペースと呼ばれます。二つの空間が人間の頭蓋骨の容量が非常に小さいことを証明することができ、我々はいくつかの非常に簡単な操作を満たすために、脳の燃焼の研修と理解の多くを通過する必要があります。

次の簡単なコマンドを見て信じてはいけない、それは、ファイルを削除するには、最後の2行です。

sed 'N; $!P;$!D;$d' file
复制代码

ではsedの「スキル」「Linuxの本番環境では、最も一般的に使用されるセット」の記事では、我々は一般的に使用されるsedコマンドと操作、および助剤として2つのマップの使用を導入しました。しかし残念ながら、二つのマップが、厳密に言えば、正確ではありません(たとえば、Sコマンド、ちょうど1つのサブセットとして)、それは助けることができる場合でも、初心者が始めます。

Benpianいくつかの一般的な、日常のアプリケーションでのsed、sedスクリプトの中間使い方があまりありませんが、多くの場合、予期しない結果を得ることができます。

原則

動作モード

この動作モードは、からSEDからです。

ファイルの尿の私たちの読書によると、一般的に連続したループは、読み取ります。次の例Pythonコード、印刷コマンドは、Pを示しています。

with open('file', 'r') as f:
    for line in f.readlines():
        print(line)
复制代码

sedコマンドでは、この上で、また別のものをバッファリング。それは、「コンテンツ・ライン」、ホールドスペースと呼ばれています。現在の行は、パタパタスペースと呼ばれます。パフォーマンスで、簡単なPythonの表情で:

hold_space = ""
with open('file', 'r') as f:
    for pattern_space in f.readlines():
        print(hold_space,pattern_space)
        hold_space = pattern_space
复制代码

上記のコード、上記図の例とほぼ同様特定方法。この例では、事業に参加していないスペースが全体の何の意味ではありません保持します:

図1は、現在の行を読み取り、wtf..パターンスペースに

2は、コマンドを実行しp、それが現在の行を出力します

3、パターンスペースの内容、およびスペースをホールドするために割り当てられました

図4は、処理は次のライン、処理サイクルを続行します

例:X

しかし、私は少しこれら二つのバッファの動作について考えます。この操作は、xが、これはいくつかのテキストエディタで、一貫性の尿を表し使用して、スワップです。

つまり、Pの前に、我々は、xを追加しました。これは、先に進む前に、最初の二つのバッファの交換を表します。

hold_space = ""
with open('file', 'r') as f:
    for pattern_space in f.readlines():
        swap(hold_space,pattern_space)
        print(hold_space,pattern_space)
        hold_space = pattern_space
复制代码

私たちは、私は、このプロセスだということを想像してみましょう。

1、最初は、hold_space内容は空です。しかし、ガチョウは、それが使用された、充填されておらず、現在の行が置換されています

図2は、置換後のバッファのpコマンドは、初めて性交、空白行を印刷します

図3は、速やかに交換して、最後の行になりまし警笛をプープーし続け、そして、hold_spaceでそれを印刷する機会ありません

4、現在の行は、データが最後から二番目の行に格納され、光ダイの最後の行は、起動する機会を持つことはありません

私たちは確かに、たとえば、私も為替のx、数回実行し、それを取得する方法を持っています。

sed -n 'x;x;x;x;p' file
复制代码

木材は乗馬の世界を旅するアルパカを感じるがありますか?

アプリケーション

栗のために

あなたは、私これら二つのバッファ交換を考えるかもしれない、使用することは何ですか?次に、このファイルを見てください。

小姐姐味道公众号
CEO
加菲猫经理
IT Manager
系统毁灭师
Sysadmin
小哥哥味道
Developer
爱卖东西的经理
Sales Manager
风清扬
Dog
复制代码

ファイルには、偶数ラインはジョブです、奇数ラインの名前です。我々は、すべてエクスポートするManager名前のを。次のコマンドを使用することができます。

sed -n -e 'x;n' -e '/Manager/{x;p}' file
复制代码

コマンドは2つの部分に分けられます。

x;n それはその後、奇数行がホールドスペースに保存され、パターンスペースに偶数ラインを保存すると述べました。

/Manager/{x;p}コマンドはパターンスペースでキーワードのマネージャーの検索を実行します。適格な場合、スイッチバッファとH pを、再び名前に対応する出力奇数行。

上記xn、これら二つのコマンドバッファです。このような多くのコマンドがあります。

コマンド

これらのコマンドは、より多くの場合、上記のコマンドと同様に、{}によって使用されてもよいです。同じ場所で私たちの以前の呼び出し、これらのコマンドの場所。

一般的に使用されます:

X私はB英語を置くために許可してください:保留の内容と交換したパターンスペースを。

D [クリア現在のパターンスペース、および次のサイクルに入ります

D最初の行(マルチパターン)のパターンスペースを削除

hはスペースを保持するためのパターンスペースをコピーします。

Hは、離間保持空間パターンに追加され

グラムスペースを保持するためのパターンスペースをコピーします。

Gは、保持スペースパターンスペースに追加されます

N次の行は、入力パターン空間に読み出されます

N次の入力ラインは2つの行が行と考えながら、パターンスペースに加え、まだ二行の間の\ nは改行を含むされます

pは、現在のパターンスペースを印刷します

P現在のパターンスペースの最初の行を印刷します

珍しいです

最後にこの種のものの多くで、倉庫番ゲームを述べました。、本当の「自由」のsedスクリプトを書く時にユーザを作成するためにも使用してスクリプトことができますSED「を:」マークを設定します。種類のプログラミング言語の特性のように、ラベルを付けます。

qは SED終了し、あなたは実行速度を向上させることができます

lは現在の行を一覧表示し、非印字文字が含まれています

L幅いずれかを使用して、現在の行に記載されている、width characters端部を

Bラベルコマンドごとに対応するタグへのジャンプ、。

ラベルTの条件が満たされたら、IF分岐は、最後の行から始まるまたはTは、tコマンドは、コマンド、またはスクリプトの末尾にラベルへの分岐が発生します。テストコマンド。

Tラベルエラーブランチは、最後の行から、一度エラーが発生した場合、またはT、tコマンドは、コマンドは、スクリプトの最後にしてラベルへの分岐が発生します。

もちろん、あまり一般的に使用される他のがありますが、あなたは、manコマンドを使用することができます

man sed
复制代码

いくつかのコマンド:オープントレーニングモード

ライン処理によって行を見ると、非常に単純なことではないようですか?インポッシブルは、錆び脳のトレーニングを見て、いくつかの簡単なコマンドは以下を参照してください。

コマンドの行と同様に

sed -n '2{h;n;x;H;x};p' file
复制代码

概要交換ライン2と第3行

最後のライン出力

sed 'N;D' file
复制代码

出力ファイルの最後の2行

sed '$!N; $!D' file
复制代码

最後の2行でファイルを削除します。

sed 'N; $!P;$!D;$d' file
复制代码

偶数ラインを印刷する別の方法

sed –n 'n;p' file
复制代码

1空白行するごとに5行。

sed 'n;n;n;n;G' file
复制代码

(任意の順序で)CCC AAAとBBBとを含む出力通路

sed -e '/./{H; $!d;}' -e 'x;/AAA/!d; /BBB/!d; /CCC/!d' file
复制代码

逆行順(最後の行が最初の行になり、最初の行が最後の行になり)

sed -n '1!G; h; $p' file
复制代码

周りにこのコマンドビットは、まず、1!G最初の行以外の行の上に直接パターンスペースを印刷、G操作、バック最後の行に、次いで逆コピーです。$コマンドの最後の行を表し、次のことを実行するには、それが可能${p}

タグ付けされた使用方法

sed -e :a -e '$q;N;11,$D;ba'
复制代码

最後の10行を印刷します。aそれはラベルです。構文は、別の行は、使用している:独立しました。

終わり

あなたの会社の競争力を向上させるためには、あなたがブラフsedスクリプト(地下鉱山)の束を得ることができます。そして、いくつかのperlスクリプトも開発中関連する経験を持つ、のような、だけでなく、他の人に言うことではない何かを、やってそれらを理解します。

これは、単純ではなく、単純なコマンドのsedされ、これは中間レベルのエントリとみなすことができます。中級あなたの頭蓋骨ので、あなたが持っている必要があり、少し焼け脳を取得するには、二つのバッファを維持します。しかし、交換、そして空にされても、人間の肉・ステート・マシンの同等。もちろん、そのような単純なこのプロセスは、あなたが脳細胞の多くを無駄にしているかについて話。あなたが賞賛するだけでなく、アルツハイマー時間の妹を遅くする方法を指している場合でも。あなたのサポートで、妹はまた、ペンバットか何かなど、技術以外のものを指すようにすることもできます。

ます。https://juejin.im/post/5cf5cb8c6fb9a07ef2010cb1で再現

おすすめ

転載: blog.csdn.net/weixin_34066347/article/details/91438475