標準入力から読み取るためにsedを取得するにはどうすればよいですか?[複製]


91

やっています

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'

と取得

unknown option to `s'

私は何が間違っているのですか?

編集:

コメントによると、コードは実際には正しいです。私の完全なコードは次のようなものでした

grep searchterm myfile.csv | sed 's/replaceme/withthis/g'
# my comment

そして、何らかの理由で私のコメントがsedへの入力として提供されていたようです。非常に奇妙な。


ファイルをreplacenameの代わりに「withthis」に置き換えますか?
Teja 2012

2
いいえ、それはあなたが試みていることではありません。他に何か足りないものがあります。
Ignacio Vazquez-Abrams

6
私の最高の推測では、あなたの本当の場合にはあなたが持っているということである/replacemewiththis。試してください:'s#replaceme#withthis#g'
cababunga 2012

4
あなたが間違っていることの1つは、あなたが実行していることを正確に示していないことです。表示するコードは問題ありません。実行している内容に問題があります。エルゴ、あなたはあなたが実行しているものを私たちに見せていません。ほとんどの場合、見えないものをデバッグすることはできません。時々、私たちは幸運になって正しく推測するでしょうが、推測したり幸運だったりする必要はありません。
Jonathan Leffler 2012

1
grepの無用な使用。sedを使用すると、次のことができます。sed '/ searchterm / s / pattern / replacement / g'myfile.csv
William Pursell 2012

回答:


120

--expressionオプションを使用します

grep searchterm myfile.csv | sed --expression='s/replaceme/withthis/g'

+ SOaddict、これはstdoutに出力するだけで、myfile.csvは変更されません。
ヨシヤ

1
ファイルのインプレース更新を行いたい場合は、私の答えでその問題を適切に解決できると思います。
ウェス・

のように見えるものgrep 'x' y | sed 'z'はすべて、にリファクタリングできますsed '/x/z' y。の無駄な使用grep
トリプリー

39

「-e」を使用してsed式を指定します

cat input.txt | sed -e 's/foo/bar/g'

1
「-e」を使用してsed-expressionを指定すると、sedをstdinから読み取ることができるのでしょうか。sedはデフォルトでstdinから読み取りますか?
ティム

1
はい。ほとんどのun * xツールとsed同様に、入力ファイルが存在しない場合はstdinから読み取ります。
ウムラウト2017

ありがとう。である-e必要?なしで動作し-eます。使用する目的は何-eですか?ありがとう。
ティム

2
OPの質問を理解できるかわかりません。echo foo | sed 's/foo/bar/g'-e出力することにより、なしで動作しbarます。だから私は彼の質問を逃したに違いない。
ティム

-eスクリプトステートメントが1つしかない場合は、指定する必要はありません。2つある場合は、sed -e '/foo/!d' -e 's//bar/g'またはsed 's/foo!d;s//bar/g'(または同等に、セミコロンの代わりに改行を使用して)と言うことができます。
トリプリー

6

sedファイルからではなく、stdinからキャッチを作成するには、を使用する必要があります-e

このような:

curl -k -u admin:admin https://$HOSTNAME:9070/api/tm/3.8/status/$HOSTNAME/statistics/traffic_ips/trafc_ip/ | sed -e 's/["{}]//g' |sed -e 's/[]]//g' |sed -e 's/[\[]//g' |awk  'BEGIN{FS=":"} {print $4}'

2

ファイル内のテキストをインプレース更新しようとしている場合、これは私の考えでははるかに簡単に推論できます。

grep -Rl text_to_find directory_to_search 2>/dev/null | while read line; do  sed -i 's/text_to_find/replacement_text/g' $line; done


-16
  1. を使用してファイルを開く vi myfile.csv
  2. 押す Escape
  3. タイプ :%s/replaceme/withthis/
  4. 入力:wqして押すEnter

これで、ファイルに新しいパターンが作成されます。


11
OPは、vimではなくsedでそれを行う方法を知りたがっていました。
Noe Nieto

1
ノエが言ったこと。また、vimソリューションは、(簡単に)スクリプト化できないため、sedの代替ソリューションよりも劣っています。
weberc2 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.