sed - 各フィールドの機能を難読化します。

sed - 各フィールドの機能を難読化します。

私はUNIX(bash)に初めて触れ、この言語を習得しようとしてきました。現在、.txtファイルに固定ヘッダーを持つテーブルを作成しようとしています。

だから私は次のようなコードを見つけました:

column -t -s : <(echo Name:Age:Gender:Height:Weight) test.txt | sed "1{p;s/./*/g}"

sed最後に、コマンド部分は完全に混乱しています。私はすべてを取り替える./*/g手段sedと世界中で起こり得る手段を知っています。.*/g

しかし、the1とtheはp;s実際に何を意味しますか?

ベストアンサー1

これは非常に賢いコードです。

sed,この素晴らしいチュートリアルで学ぶことができるように、適用可能住所そして注文する。 アドレスを省略すると、commonなどの各行でコマンドが実行されますs/old/new/

アドレスは行番号または正規表現です。または、カンマ区切りのアドレス範囲にすることもできます。これについてはもう説明しません。 (詳しくは上記のチュートリアルをご覧ください。)

コマンドは単一のコマンドでも、中括弧で囲まれた複数のコマンドでもかまいません。

この sed コマンドはprint コマンドを実行します。それからs行1に代替コマンドを入力します。その結果、入力の最初の行の後に同じ長さの文字列が表示されます***

このsコマンドの後にはrintコマンドは表示されませんが、そのオプションが最初にsedに渡されない限り、各行の終わりにp「パターンスペース」のすべての内容が暗黙的に印刷されます。-n(詳しくは上記のチュートリアルをご覧ください。)


本質的に、これはテーブルに美しいタイトルを作成する簡単な方法です。


コメントに返信するには、次を編集してください。

したがって、このpコマンドは1sedの先頭のどこにでも配置できますor at the end? Also, the。 `(ピリオド)は住所が省略されたことを意味しますか?

いいえ、正確ではありません。

つまり1、次のコマンドのリスト(中括弧で囲まれている)は、入力の最初の行にのみ適用されます。

これpが意味するのは、パターン空間の現在の内容と改行文字を印刷することです。 (この時点では、パターン空間には入力の最初の行が含まれています。これはSedの仕組みだからです。)

これは、正規表現(すべての文字と一致)のすべての一致(グローバル)s/./*/gに対して文字が置き換えられることを意味します。これはパターン空間で動作します。g.*

その後、コマンドの終わり(閉じ括弧)にコマンドがなくなり、パターンスペースの内容が暗黙的に印刷されます。この時点にはアスタリスク(***)のみが含まれています。

次に、入力の次の行をパターン空間に読み込みます。アドレスが1一致しないため、中括弧コマンドブロックをスキップします。中かっこブロックの末尾にはもはや命令がないので、パターン空間の内容は暗黙的に印刷される。入力がある限り、このセクションを繰り返します。したがって、結果は、最初の行以降の残りの入力が変更されずに印刷されることです。

したがって、出力には入力のすべての行と文字のみが含まれ、最初の行と同じ長さの最初の行の後の行が*含まれます。

おすすめ記事