タグ付けされた質問 「sed」

sedは、テキストをフィルタリングおよび変換するためのコマンドラインストリームエディターです。

8
ファイル内の文字列を置き換えるにはどうすればよいですか?
特定の検索条件に基づいてファイル内の文字列を置き換えることは非常に一般的なタスクです。どうやって 現在のディレクトリ内のすべてのファイルで文字列fooを置き換えますbarか? サブディレクトリにも同じことを繰り返しますか? ファイル名が別の文字列と一致する場合にのみ置き換えますか? 特定のコンテキストで文字列が見つかった場合にのみ置き換えますか? 文字列が特定の行番号にある場合は置き換えますか? 複数の文字列を同じ置換で置き換えます 複数の文字列を異なる置換に置き換えます
752 text-processing  awk  sed  perl 

3
shスクリプトでsedを使用する場合、どの文字をエスケープする必要がありますか?
次のスクリプトを使用します。 #!/bin/sh sed 's/(127\.0\.1\.1)\s/\1/' [some file] sh(dashここ)でこれを実行しようとすると、エスケープする必要がある括弧のために失敗します。しかし、私はしません(オクテットの間、またはバックスラッシュ自体をエスケープする必要があります\sか\1)。ここでのルールは何ですか?いつ使用する必要があります{...}か[...]?私がしていることと逃げる必要がないことのリストはありますか?

14
sedを使用して複数行の文字列を置き換えるにはどうすればよいですか?
を\n使用して置換するパターンに追加すると、sed一致しないことに気付きました。例: $ cat > alpha.txt This is a test Please do not be alarmed $ sed -i'.original' 's/a test\nPlease do not/not a test\nBe/' alpha.txt $ diff alpha.txt{,.original} $ # No differences printed out これを機能させるにはどうすればよいですか?

14
巨大な(70GB)、1行のテキストファイルの文字列を置き換えます
巨大な(70GB)1行のテキストファイルがあり、その中の文字列(トークン)を置き換えたいと思います。token <unk>を別のダミートークンに置き換えたい(グローブの問題)。 私が試したsed: sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new しかし、出力ファイルにcorpus.txt.newはゼロバイトがあります! 私もperlを使ってみました: perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new しかし、メモリ不足エラーが発生しました。 小さいファイルの場合、上記の両方のコマンドが機能します。 そのようなファイルである文字列を置き換えるにはどうすればよいですか? これは関連した質問ですが、答えはどれもうまくいきませんでした。 編集:ファイルを10GBのチャンク(または何でも)に分割し、それぞれに適用sedしてからマージするのはcatどうですか?それは理にかなっていますか?よりエレガントなソリューションはありますか?


4
一致するパターンの後の行の部分のみを返す
したがって、ファイルを開いcatてgrepから一致する行を取得するために使用するのは、現在扱っている特定のログセットを操作しているときだけです。行をパターンに一致させる方法が必要ですが、一致後の行の部分のみを返す必要があります。試合の前後の部分は一貫して変化します。sedまたはを使用して遊んでawkいますが、一致する前に部分を削除するか、一致した後に部分を返すために行をフィルタリングする方法を見つけることができませんでした。これは、フィルタリングする必要がある行の例です。 2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 } 私が必要とする部分は「停止」後のすべてです。 この背景には、何かがストールする頻度を見つけることができるという背景があります。 cat messages | grep stalled | wc -l 私がする必要があるのは、特定のノードが何回ストールしたかを調べることです(「ストール」後の各コロンの前の部分で示されます。失速していないので、私は助けにはなりません。 すべての意図と目的のために、これは標準のGNUコアutilsを備えたfreebsdシステムですが、支援するために追加のものをインストールすることはできません。

13
デコードURLエンコード(パーセントエンコード)
URLエンコードをデコードしたいのですが、これを行うための組み込みツールはありますか、またはsedこれを行うコードを提供してくれる人はいますか? unix.stackexchange.comとインターネットを少し検索しましたが、URLエンコードをデコードするためのコマンドラインツールが見つかりませんでした。 私がやりたいことは、txtファイルを編集して、次のようにすることです。 %21 になる ! %23 になる # %24 になる $ %26 になる & %27 になる ' %28 になる ( %29 になる ) 等々。

7
grep、awk、sedの基本的なチュートリアルはありますか?[閉まっている]
私はしばらくの間Linuxユーザーであり、ほとんどの一般的なコマンドラインユーティリティをかなりよく理解しています。しかし、プログラミングに関連して、再び起動して出てくるものがありgrep、awkとsed。 私がgrepを使用した唯一のことは、ログファイル内のファイル、出力psなどを見つけるためにパイプを使用することです。私は使用していないawkかsed、まったく使用していません。これらのユーティリティの良いチュートリアルはありますか?
95 grep  sed  awk 

6
ファイルの内容を小文字に変換します
temp小文字と大文字の内容のファイルがあります。 入力 私のtempファイルの内容: hi Jigar GANDHI jiga 上位から下位にすべて変換したいです。 コマンド 私は次のコマンドを試しました: sed -e "s/[A-Z]/[a-z]/g" temp しかし、間違った出力を得ました。 出力 私はそれが欲しい: hi jigar gandhi jiga 引数の代替部分には何が必要sedですか?

7
sedを使用して、複雑な文字列を検索および置換します(正規表現を使用することが望ましい)
次の内容のファイルがあります。 <username><![CDATA[name]]></username> <password><![CDATA[password]]></password> <dbname><![CDATA[name]]></dbname> そして、1行目の「名前」を「何か」に、2行目の「パスワード」を「何か」に、3行目の「名前」を「何か」に変更するスクリプトを作成する必要があります。ファイル内で発生するこれらの順序に依存することはできないため、「name」の最初の出現を「something」に、2回目の「name」の出現を「somethingdifferent」に単純に置き換えることはできません。正しいものを見つけて置き換えるために、実際に周囲の文字列を検索する必要があります。 これまでのところ、最初の「名前」の出現を見つけて置き換えるためにこのコマンドを試しました。 sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml しかし、それは機能していないので、これらのキャラクターのいくつかはエスケープする必要があるなどと考えています。 理想的には、正規表現を使用して、2つの「ユーザー名」の出現を一致させ、「名前」のみを置換できるようにしたいです。このしかし、とのような何かsed: <username>.+?(name).+?</username> 括弧内の内容を「何か」に置き換えます。 これは可能ですか?



5
特定の文字列と次の行を含む行を削除します
私はこれを使用します cat foo.txt | sed '/bar/d' barファイル内の文字列を含む行を削除します。 ただし、これらの行とその直後の行を削除します。好ましくでsed、awkまたはMINGW32で利用できる他のツール。 それは私が得ることができるものの逆のようなものだgrepと-Aし、-Bマッチした行の前/後に一致した行だけでなく、ラインを印刷します。 それを達成する簡単な方法はありますか?

7
一致するまですべてのファイルを表示する
grep --before-context 5 一致する前に5行を表示します。 試合前にすべてを見せたいです。 行うことgrep --before-context 99999999は機能しますが、それはそれほどプロフェッショナルではありません... 一致するまですべてのファイルを表示する方法は?

6
sedを使用して複数のスペースを1つに取り除く方法は?
sedAIX上では、私が思うはずのことをしていません。IOSTATの出力で複数のスペースを単一のスペースに置き換えようとしています。 # iostat System configuration: lcpu=4 drives=8 paths=2 vdisks=0 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.2 31.8 9.7 4.9 82.9 2.5 Disks: % tm_act Kbps tps Kb_read Kb_wrtn hdisk9 0.2 54.2 1.1 1073456960 436765896 hdisk7 0.2 54.1 1.1 1070600212 435678280 hdisk8 0.0 0.0 0.0 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.