[解決済み] sedにおける「ホールドスペース」と「パターンスペース」の概念
質問
sedの2つの概念、hold spaceとpattern spaceに混乱しています。誰かがそれらを説明するのを助けることができますか?
ここにマニュアルのスニペットがあります。
h H Copy/append pattern space to hold space. g G Copy/append hold space to pattern space. n N Read/append the next line of input into the pattern space.
この6つのコマンドは本当に私を混乱させる。
どのように解決するのですか?
sedがファイルを一行ずつ読み込むとき、現在読み込んでいる行を パターン バッファ (パターンスペース) に挿入されます。パターンバッファは一時的なバッファのようなもので、現在の情報が格納されるスクラッチパッドです。sedに印刷を指示すると、パターンバッファを印刷します。
ホールドバッファ/ホールドスペースは、何かを捕まえて保存し、後でsedが別の行を処理するときに再利用できるような、長期保存のようなものです。ホールドスペースを直接処理するのではなく、コピーするか、パターンスペースに追加する必要があります。例えば、print コマンドは
p
はパターン・スペースだけを表示します。同様に
s
はパターン空間を操作する。
以下はその例である。
sed -n '1!G;h;$p'
(-nオプションは行の自動印刷を抑止します)
ここには3つのコマンドがあります。
1!G
,
h
と
$p
.
1!G
にはアドレスがあります。
1
(1行目)がありますが
!
は、コマンドがどこでも実行されることを意味します
が
を除く全ての場所で実行されることを意味します。
$p
は最後の行で実行されます。つまり、どうなるかというと、こうなります。
- 最初の行が読み込まれ、パターンスペースに自動的に挿入されます。
-
最初の行では、最初のコマンドは実行されません。
h
は最初の行を ホールド のスペースにコピーします。 - ここで、2行目はパターンスペースにあったものを置き換えます。
-
2 行目では、まず
G
を実行し、ホールドバッファの内容をパターンバッファに追加し、それを改行で区切ります。パターンスペースには、2 行目、改行、1 行目が含まれます。 -
次に
h
コマンドはパターンバッファの連結した内容をホールドスペースに挿入し、ホールドスペースは現在、反転した2行目と1行目を保持しています。 - 3行目に進みます -- 上記(3)のポイントに移動してください。
最後に、最後の行が読み込まれ、ホールドスペース(前の行をすべて逆順で含む)がパターンスペースに追加された後、パターンスペースは、以下のように印刷されます。
p
. ご推察の通り、上記はまさに
tac
コマンドと全く同じことをします -- ファイルを逆に表示します。
関連
-
Linux sarコマンドによるシステム性能の詳細解析事例
-
ロックされたdeepinファイルを削除する方法は?deepinのロック付きファイルを削除する方法のヒント
-
deepinv20 linux ファイルのサフィックスを変更する方法は?Linuxでファイルの拡張子を変更する方法
-
deepin linuxからmacosx仮想マシンに直接ファイルをドラッグ&ドロップする方法は?
-
Kali Linuxのデフォルトのひげメニューアイコンを変更する方法は?
-
deepin20のソフトをアンインストールする方法を教えてください。deepinのアプリケーションをアンインストールする2つの方法
-
[解決済み] Linux/Unixで$PATHを永久に設定する方法 [終了しました].
-
[解決済み] 特定のファイル/フォルダを除外してディレクトリをtarするシェルコマンド
-
[解決済み] bashスクリプトでset -eはどういう意味ですか?
-
[解決済み】bash/sedスクリプトを使用してテキストファイルの最初の行を削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linuxにおけるxinetdサービスの管理方法に関するケーススタディ
-
deepin20の不正確な時刻表示を調整する方法は?Deepinの時刻補正方法
-
Kali Linuxのデスクトップの外観スタイルを変更するには? KALIの外観の最適化のヒント
-
Linux MintのデスクトップでNoteをイタリックにすることは可能ですか?
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
TclError: 表示名がなく、$DISPLAY環境変数もない。
-
Apache の一般的な設定エラー
-
[解決済み] ビーコン待ちでハングアップしたリーバー
-
[解決済み] gzip: stdin: gzip 形式ではありません tar: 子プロセスはステータス 1 を返しました。エラーは回復不可能: 現在終了中
-
[解決済み] Linuxのディレクトリ内のファイルを再帰的にカウントする