検索して置換するには、grep(sedではない)を使用してください。

検索して置換するには、grep(sedではない)を使用してください。

私はそれを読み、sedそれがgrep命令から発展したことを発見しました。

~によるとhttps://en.wikipedia.org/wiki/Sed

Unixバージョン7で最初に登場したsedは、データファイルのコマンドライン処理用に作成された最初のUnixコマンドの1つです。広く使用されているgrepコマンドの自然な後続バージョン。元の動機は grep(g/re/p) に似ているので、 "g/re/s" です。

sed 検索と置換

sed 's/old/new/' Example.txt

grepそれで、同じことをすることが可能かどうか疑問に思いますsed

grep可能であれば、viaではなくviaを介して同じことを行う方法を教えてくださいsed

ベストアンサー1

grepパターンに一致する行のみ(そして最初にのみ)印刷するために使用されます。これが意味するものです(コマンドgrepに従って)。g/re/p ed

いくつかのgrep実装では、他のコマンドの機能をわずかに侵害する機能を追加します。たとえば、一部にはタスクの一部を実行するための-r// 一部があります。--include--excludefind

GNUは、一致する行を編集するときに操作の一部を実行するオプションをgrep追加しました。-osed

pcregrepキャプチャグループが一致するものを印刷するには-o1、...に展開します。-o2したがって、その実装を使用すると、これを行うように設計されていなくても、実際に次のものを置き換えることができます。

sed 's/old/new/'

そして:

pcregrep --om-separator=new  -o1 -o2 '(.*?)old(.*)'

ただし、キャプチャグループが空の文字列と一致すると正しく機能しません。次のように入力すると:

XoldY
Xold
oldY

それは以下を提供します:

XnewY
X
Y

この問題を解決するには、次のようなより嫌なトリックを使用できます。

PCREGREP_COLOR= pcregrep --color=always '.*old.*' |
  pcregrep --om-separator=new -o1 -o2 '^..(.+?)old(.+)..' |
  pcregrep -o1 '.(.*).'

つまり、\e[m一致するすべての行に(着色エスケープシーケンス)を追加して、の両側に1つ以上の文字があることを確認してからold削除します。

おすすめ記事