sed -n
コマンド処理後の結果のみが表示されることを意味するため、結果を表示するには 'p'を追加する必要があります。- それ以外の場合、
sed -n
結果は表示されません
これは正しいですか?
sed [root@ljl ~]# cat a.txt
1111simon111
simon2222222
333simon3333
444444444444
5555555simon
simon6666666
7777777simon
888888888888
[root@ljl ~]# sed -n 's/simon/lili/gp' a.txt
1111lili111
lili2222222
333lili3333
5555555lili
lili6666666
7777777lili
[root@ljl ~]# sed -n 's/simon/lili/g' a.txt
[root@ljl ~]#
答え1
各「ループ」の最後で編集スクリプトの最後のコマンドを実行したら、パターンスペースの現在の内容を印刷し、それを現在の入力ファイルの次の行に置き換える暗黙のsed
コマンドがあります。n
だからスクリプトはサイクルトップに戻ります。
そのオプションで始まると、このコマンド(およびスクリプトの他のコマンドn
)の出力は表示されません。n
sed
-n
使用は-n
意味しませんみんな出力がsed
抑制されます。たとえば、r
ファイルからテキストを読み取り、それを標準出力に送信するコマンドは、=
現在の行番号を印刷するコマンドと同様に、標準出力に出力を生成します。同様に、テキストを追加、挿入、および変更するためのコマンド、およびさまざまな特定の方法でテキストを出力するためのコマンド、および関係なくa
出力を生成します(これらのコマンドの特定の機能については、マニュアルを参照してください)。エラーなどは自然に標準エラーにもないように出力されます。i
c
l
P
-n
sed
-n
また、このコマンドは、質問で述べたフラグ()で使用されているコマンドp
と同様に、出力を生成します。s///
p
s///p
コマンドがパターン空間を破棄し、すぐに次のループを開始すると、あまりd
一般的に使用されていないコマンドと同様に、常にスクリプトの末尾の暗黙のエントリがスキップされます。n
D
-n
sed
このオプションは、スクリプトの先頭に使用して#n
スクリプト内で呼び出すことができます。
例:コマンドラインで使用されているかどうかにかかわらず、部分sed
文字列を含む行のみを印刷するスクリプト。HELLO
-n
#n
/HELLO/p
最初の行にする必要があります。このスクリプトでは、#n
スクリプトの明示的なコマンドによって印刷される内容を除くすべての行の印刷が抑制されます。p
答え2
p
はい、を使用している場合は、一致/変更された行を印刷するにはを使用する必要があります-n
。
man sed
(GNUバージョン)から:
-n、-静か、-無音
パターン空間の自動印刷抑制
答え3
sed -n
「コマンド処理結果のみ表示する」という意味ではありません。これは、「明示的に要求された場合にのみ印刷」、すなわち「自動印刷しない」を意味する。
p
通常、明示的かつ無条件に印刷するにはコマンドを使用します。あなたの場合は次のとおりです。
sed -n 's/simon/lili/g;p' a.txt
上記の構文は使用した構文ではありません。これがあなたが使うものです:
sed -n 's/simon/lili/gp' a.txt
これはp
(g
修飾語のような)修飾語ですs
。交換するとその後、新しいパターンスペースを印刷します。"そのp
コマンドと同様に、明示的な印刷要求(これは役に立ちます-n
)ですが、条件付きです。