コマンドはテキスト ファイルに何 sed -e 's/\(~\).*\(~\)//
を行うのでしょうか? 理解できません。仕事中に遭遇しました。
答え1
コマンドは(最後に欠落している一重引用符を追加した場合)、ファイルのすべての行を端末に出力しますが、いずれかの行に少なくとも 2 つの(チルダ)文字がある場合は、内の置換コマンド( )によって~
最初と最後の間のビットが削除されます。~
s
sed
例:
$ cat file
1 2 3 ~ 4
1~2~3
Here is ~ the last ~ line ~ THE END
$ sed -e 's/\(~\).*\(~\)//' file
1 2 3 ~ 4
13
Here is THE END
ただし、と\(
は\)
必要ありません(式では後方参照が使用されていないため)。また、 も-e
省略できます(式が1つしかないため)。したがって、このコマンドは次のコードと同等です。
sed 's/~.*~//' file
だから、するファイル自体には何も変更されませんが、ファイルの内容を読み取って変更し、処理されたテキストを生成します。このテキストは、リダイレクト ( sed ... >newfile
) を使用して新しいファイルに保存できます。
後方参照できたこのコマンドでは次のように使用します。
sed 's/\(~\).*\1//' file
つまり、 に一致し~
、次に他のテキストに一致し、最後に最初のグループで一致したもの\(...\)
(チルダ) に一致します。ただし、これによって入力が節約されたり、コマンドの保守や理解が容易になったりするわけではないため、 の改善にはなりませんsed 's/~.*~//' file
。