sed:-nスイッチを使用する代わりに、スクリプトファイルを介して自動印刷を無効にする方法は?

sed:-nスイッチを使用する代わりに、スクリプトファイルを介して自動印刷を無効にする方法は?

コマンドラインとスクリプトファイルインターフェイスの切り替えについて混乱しています。私はうまくいくコマンドラインに素晴らしいスクリプトを書いていますが、それを.sedファイルに保存しようとすると、もはや.sed-nファイルが利用できないことを覚えています。 "!d"フラグを試してみましたが、同じ結果が出ませんでした。私の質問:
これを.sedファイルに入れる方法はありますか-n、それともスクリプトファイルインターフェイスにあるときに自動印刷を停止する別の方法はありますか?スクリプトをシェルから保護することから保護しないものに切り替えることは嫌いですが、迂回する方法がないようです。

答え1

標準(POSIX)メソッドは#nスクリプトの先頭にあります。これはスクリプトの最初の2バイトでなければなりません。

これは、実行中のスクリプトでのみ利用可能なshe-bangの使用を排除しますsed -f the-script(she-bangsはPOSIXではなくPOSIXはユーティリティへのパスを指定しません)。します。

#! /path/to/sed -nf

sedパラメータ(ほとんど)を使用してシャバンをサポートするシステムで実行可能なスクリプトを作成したい場合。

#n次のようにコマンドラインでも機能します。

sed '#n
  s/foo/bar/p'

「いいね!」の後にテキストを追加できます。

#no default output
s/foo/bar/p

または:

#nifty way to turn -n on
s/foo/bar/p

実際には、-n誤って開かないように覚えておくべきことです。#このため、(および読みやすくするために)コメントの後にスペースを使用することをお勧めします。

# no, I don't want to turn -n on
s/foo/bar/

答え2

sed [-e] 'command'そしてsed -f /path/to/scriptスイッチ-nはまったく同じように動作します。sedスクリプトを実行して「基本印刷」動作をオフにするには、を使用しますsed -n -f /path/to/script.sed /path/to/input

答え3

sed次のコマンドを使用してスクリプトを実行する必要があります。

$ sed -n -f script.sed

または、#!スクリプトの("hash-bang")行を次のように変更します。

#!/usr/bin/sed -nf

そしてそれを実行

$ ./script.sed

関連情報