[sed] dコマンドは「パターンスペース削除」ではなく「パターンスペース削除後に次のサイクルを開始する」
要点
sedのdコマンドについて「パターンスペースの削除」と記憶していたが、実は「パターンスペース削除後に次のサイクルを開始する」だった
解説
test.txt
1
2
3
4
5
test.txt
1
2
3
4
5
上記ファイルがあるとき、
command
$ sed -n 'p; /3/d; s/^/-/p' test.txt
このコマンドの出力に以下を想定していた
expected_output
1
-1
2
-2
3
-
4
-4
5
-5
しかし、実際の出力は以下だった。
actual_output
1
-1
2
-2
3
4
-4
5
-5
理由としては/3/d
にマッチした後、以降の処理s/^/-/p
が実行されず次の行の処理を開始したため。
この「次のサイクルを開始する」の部分を知らずに、ループ処理の途中等でd
コマンドを使うと、想定外の結果となってしまうので注意が必要。
Author And Source
この問題について([sed] dコマンドは「パターンスペース削除」ではなく「パターンスペース削除後に次のサイクルを開始する」), 我々は、より多くの情報をここで見つけました https://qiita.com/shigekimono/items/9ea7fe6a6a34b45e8635著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .