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

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

2
Grepで正しい行を見つけ、sedで内容を変更してから、元のファイルに戻しますか?
ファイルの特定の行の1つの単語を変更しようとしていますが、すべてを一緒に接続するのに問題があります。 基本的に、ファイルの1行に「firmware_revision」というキーワードがあり、この行(およびこの行のみ)に「test」という単語を「production」という単語に置き換えたいと思います。 だから私はこれを行うことができます: grep 'firmware_revision' myfile.py | sed 's/test/production' これにより、必要な行が選択され、置換が実行されますが、この新しい行を元のファイルに入れて古い行を置き換える方法がわかりません。ファイルにリダイレクトすることはできないので、どうすればよいですか? 一時grepファイルを使用していても、を使用して必要な行だけを取得すると、ファイル内の他のすべてのデータが失われるため、すべてを一時ファイルにリダイレクトして元のファイルを一時ファイルに置き換えることはできなくなります。 編集-誰かが詳細情報を求めました このような行でいっぱいのファイルがあるとしましょう [ ('key_name1', str, 'value1', 'Description'), ('key_name2', str, 'value2', 'Description'), ('key_name3', str, 'value3', 'Description'), ('firmware_revision', str, 'my-firmware-name-test', 'Firmware revision name') ] ここで、「firmware_revision」を含む行を検索し、その行の「test」という単語のすべてのインスタンスを「production」に変更するスクリプト(理想的には1行)を記述したいと思います。「テスト」という単語がそのファイルの他の場所にある可能性があり、それらを変更したくありません。明確にするために、上の行を ('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name') どうすればよいですか?

7
file2から行の正確なブロック(file1の内容)をgrep
2つのファイルがfile1ありfile2ます。 のサンプルコンテンツfile1は次のとおりです。 A B C D E F G H の内容file2は次のようなものです: A B few other lines E F few more other lines A B C D E F G H few more other lines G H したがって、file1コンテンツのブロック全体file2のみを検索したいと考えています。つまり、出力には次の行のみが含まれます。 A B C D E F G H 注意してください:-一緒に来る行のみが出力の一部になるはずです。

3
複数行のコードをsedに置き換える方法は?
特殊文字が含まれている大きなファイルがあります。そこに私が置き換えたい複数行のコードがありsedます。 この: text = "\ ------ ------\n\n\ This message was automatically generated by email software\n\ The delivery of your message has not been affected.\n\n\ ------ ------\n\n" これに変える必要があります: text = "" 次のコードを試しましたが、うまくいきませんでした。 sed -i '/ text = "*/ {N; s/ text = .*affected.\./ text = ""/g}' /etc/exim.conf 何も置き換えず、エラーメッセージも表示しません。 私はそれで遊んでいますが、私がしようとするすべてが機能しません。

5
/ path / to / fileを/ p / t / fileに短縮する方法
awk各親/中間レベルの最初の文字を使用して、完全なベース名を使用して、Unixパスの文字列を短くするエレガントなワンライナー(例:)を探しています。例で示す方が簡単: /path/to/file → /p/t/file /tmp → /tmp /foo/bar/.config/wizard_magic → /f/b/./wizard_magic /foo/bar/.config/wizard_magic→ /f/b/.c/wizard_magic 以下の@MichaelKjörlingおよび@ChrisHによる良い点を考慮して、この例では、最初の文字がドットの場合に最初の2文字を表示する方法を示しています。
9 sed  awk  string 

3
sed-3番目の単語をすべて大文字にする方法
与えられた: main_east_library main_west_roof main_north_roof minor_south_roof 私が使用するにはどうすればよいsed(具体的には、いないawk、trなど)を作成します。 main_east_Library main_west_Roof main_north_Roof minor_south_Roof 何かのようなもの: $ echo "main_west_library main_west_roof main_north_roof minor_south_roof" | sed 's_\3_upcase(\3)_' それは与えるが: sed: -e expression #1, char 16: Invalid back reference
9 sed 

5
2つのファイルの代替行をマージする
ファイル1: .tid.setnr := 1123 .tid.setnr := 3345 .tid.setnr := 5431 .tid.setnr := 89323 ファイル2: .tid.info := 12 .tid.info := 3 .tid.info := 44 .tid.info := 60 出力ファイル: .tid.info := 12 .tid.setnr := 1123 .tid.info := 3 .tid.setnr := 3345 .tid.info := 44 .tid.setnr := 5431 .tid.info := 60 .tid.setnr := …

7
複数行のレコードを分割せずに大きなテキストファイルを効率的に分割する方法
私は大きなテキストファイルを持っています(gzしたとき〜50Gb)。ファイルには4*N行またはNレコードが含まれています。つまり、すべてのレコードは4行で構成されます。このファイルを、入力ファイルのおよそ25%のサイズの4つの小さなファイルに分割したいと思います。ファイルをレコード境界で分割するにはどうすればよいですか? 素朴なアプローチはzcat file | wc -l、行数を取得し、その数を4で除算してからを使用することsplit -l <number> fileです。ただし、これはファイルを2回超えるため、行カウントは非常に遅くなります(36分)。もっと良い方法はありますか? これは近いですが、私が探しているものではありません。受け入れられた回答も行数をカウントします。 編集: このファイルには、fastq形式のシーケンスデータが含まれています。2つのレコードは次のようになります(匿名化)。 @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTTTATGTTTTTAATTAATTCTGTTTCCTCAGATTGATGATGAAGTTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFFFFFFFFFAFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF<AFFFFFFFFFFAFFFFFFFFFFFFFFFFFFF<FFFFFFFFFAFFFAFFAFFAFFFFFFFFAFFFFFFAAFFF<FAFAFFFFA @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCCCTCTGCTGGAACTGACACGCAGACATTCAGCGGCTCCGCCGCCxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFF7FFFFFFAFFFFA#F7FFFFFFFFF7FFFFFAF<FFFFFFFFFFFFFFAFFF.F.FFFFF.FAFFF.FFFFFFFFFFFFFF.)F.FFA))FFF7)F7F<.FFFF.FFF7FF<.FFA<7FA.<.7FF.FFFAFF 各レコードの最初の行はで始まり@ます。 EDIT2: zcat file > /dev/null 31分かかります。 EDIT3: 最初の行のみがで始まり@ます。他の誰もこれまでしません。こちらをご覧ください。レコードは整理された状態である必要があります。結果のファイルに何かを追加することはできません。

4
非常に長い行での検索と置換のSed代替
レコードの最後に改行を入れなかったプログラムによって生成されたファイルがあります。レコード間に改行を入れたいのですが、簡単なsedスクリプトでそれを行うことができます。 sed -e 's/}{/}\n{/g' 問題は、入力ファイルのサイズが数ギガバイトであるため、sedへの入力行の長さが数GBであることです。sedはメモリに行を保持しようとしますが、この場合は機能しません。私は--unbufferedオプションを試しましたが、それはそれが遅くなるようで、正しく終了することを許可しませんでした。
9 sed 

2
sed:単一行の入力で失敗することなく、ファイル全体をパターンスペースに読み込みます
ファイル全体をパターンスペースに読み込むことは、改行を置き換える場合に便利です&c。そして、次のことを助言する多くのインスタンスがあります: sed ':a;N;$!ba; [commands...]' ただし、入力に1行しか含まれていない場合は失敗します。 例として、2行入力の場合、すべての行が置換コマンドの影響を受けます。 $ echo $'abc\ncat' | sed ':a;N;$!ba; s/a/xxx/g' xxxbc cxxxt ただし、1行入力の場合、置換は実行されません。 $ echo 'abc' | sed ':a;N;$!ba; s/a/xxx/g' abc sed一度にすべての入力を読み取るコマンドを記述して、この問題を回避するにはどうすればよいですか?
9 sed  newlines 

8
sedコマンドを使用してLinuxの各行の最後の単語を出力できますか?
以下の行で構成されるファイルがある場合、 12345 567 7878 66 er3 t45t y6y46y 4年6年656年5年 46年6年65年7年66年 yy46y6y 出力は次のようになります。 66 y6y46y y5y y66uyuyy y46y6y コマンドsed 's/.* //g'ファイル名と他のいくつかのsedコマンドを試しましたが、機能しません。 正確なsedコマンドは何ですか?

5
文字列を検索し、範囲内の前後のすべてを出力します
私はこのファイルを持っています: sometext1{ string1 } sometext2{ string2 string3 } sometext3{ string4 string5 string6 } このファイルで特定の文字列を検索し、この文字列の前から始まりまで、{およびこの文字列の後から終わりまでのすべてを印刷します}。私はsedでこれを達成しようとしましたが/{/,/string2/、たとえばsedでこの範囲のすべてを印刷しようとすると、次のように印刷されます。 sometext1{ string1 } sometext2{ string2 sometext3{ string4 string5 string6 } 文字列「string2」を検索すると、次のような出力が必要です。 sometext2{ string2 string3 } ありがとう。

8
前の行に行を追加する方法は?
解析と分析が必要なログファイルがあります。ファイルには、次のようなものが含まれています。 ファイル: 20141101 server contain dump 20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdl sddsfd jfkdfk 20141101 server contain dump 上記のシナリオに基づいて、開始行に日付または前の行に追加する必要がある数値が含まれていないかどうかを確認する必要があります。 出力ファイル: 20141101 server contain dump 20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdl sddsfd jfkdfk 20141101 server contain dump

1
sedのN番目から最後の行以外をすべて印刷するにはどうすればよいですか?
の補完/反対をしたい sed 13q;d <file.txt より一般的には、この種の補数/逆数/逆数をこのようにすることは可能sedですか?または正規表現のみですか? 最後から3行目以外のすべてを印刷するにはどうすればよいですか。これには2 tacの値が必要であり、それを数える必要がありsedますか?それともsed、後ろから数える方法はありますか?

2
文字列を順次インデックスに置き換えます
誰かがこれを達成するためのエレガントな方法を提案できますか? 入力: test instant () test instant () ... test instant () //total 1000 lines 出力は次のようになります。 test instant1 () test instant2 () test instant1000() 空の行が入力ファイルにあり、同じディレクトリの下に一度に処理する必要のあるファイルがたくさんあります。 同じディレクトリ内の多くのファイルを置き換えるためにこれを試してみましたが、機能しませんでした。 for file in ./*; do perl -i -000pe 's/instance$& . ++$n/ge' "$file"; done エラー: Substitution replacement not terminated at -e line 1. Substitution replacement …

2
テキストファイルから不明なUnicode文字を削除-sed、その他のbash / shellメソッド
同じ名前のいくつかのファイルで、不明な文字のすべての出現を検索して置き換える必要があります。 そのようなファイルをviで開いて、その文字の<91>コードを読みました。それらをnanoで開くと、私はダイヤモンド(黒いランブル)の「疑問符」を読みました。 このような不明な文字を引用符( ')に置き換えたいと思います。私は運が悪いのにいろいろな方法を試しています。 私は試した: find ./ -name filename.txt -exec perl -i~ -pe "s/\x91/'/" {} \; find ./ -name filename.txt -exec sed -i "s/\x91/'/g" {} \; 編集 キャラクターの詳細: Hexadecimal: 91 68 74 74 Decimal: 145 104 116 116 Octal: 221 150 164 164 Binary: 10010001 01101000 01110100 01110100 LC_ALL=C sed …

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