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

3
1回のパスで複数の文字列を置き換える
テンプレートファイルのプレースホルダー文字列を、一般的なUnixツール(bash、sed、awk、perlなど)で具体的な値に置き換える方法を探しています。交換が1回のパスで行われることが重要です。つまり、すでにスキャン/交換されたものを別の交換と見なしてはなりません。たとえば、次の2つの試みは失敗します。 echo "AB" | awk '{gsub("A","B");gsub("B","A");print}' >> AA echo "AB" | sed 's/A/B/g;s/B/A/g' >> AA この場合の正しい結果はもちろんBAです。 一般に、ソリューションは、入力を左から右にスキャンして、指定された置換文字列の1つとの最長一致を検索し、各一致について置換を実行して、入力のそのポイントから続行することと同等でなければなりません(すでに読み込まれた入力も、実行された置換も一致と見なされます)。実際、詳細は関係ありません。置換の結果が全体または一部が別の置換の対象になることはありません。 注私は正しい一般的なソリューションのみを探しています。特定の入力(入力ファイル、検索および置換ペア)で失敗するソリューションを提案しないでください。
11 bash  sed  awk  string  replace 

2
vimで大文字と小文字を区別する検索と置換?
ではvim、大文字と小文字を区別してもしなくても検索できます。しかし、大文字または小文字のいずれかで文字列を検索し、それを同じ大文字の代わりに置き換えたい場合、単一で可能:s///ですか? たとえば、次の行を変更します。 short Short SHORT に long Long LONG 私はこれを3つの:sコマンドで実行することも、1つを区別:sせずに手動でケースを修正することもできますが、もっと良い方法はありますか?ケースを保持した検索と置換?

5
Sed:改行ごとにパターンを置き換えますか?
sed2回目に発生するたびにパターンを置き換えるように指示する方法はありますか?または、少なくとも1行おきに?(確かに、それはスクリプトでsed可能ですが、それができるかどうか自分に尋ねていました)。 編集する 見つけた sed -e "s/pattern/replacement/g;n" しかし、それは2回目ではなく、すべての最初の発生を置き換えました。 例 入力ファイル: I have a pattern in each line Also the second line has the pattern Another pattern here And -- you guess it -- a pattern 望ましい出力: I have a pattern in each line Also the second line has the replacement Another …
10 sed  replace 

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 …


4
1つの行に2つの条件/置換を含む複数のファイルの名前を変更しますか?
いくつかの画像の名前を変更しようとしています: IMG_1.JPG IMG_2.JPG IMG_3.JPG 私は交換したいIMGとimgして.JPGと.jpg-私は2番目の部分を行う方法を知っています: $ rename 's/\.JPG$/\.jpg/' *.JPG 私の問題は、私がように見えることはできませんということであるmv IMG_.JPGとimg_.jpg私はあなたに複数のパターンを渡すことができます知っている- renameが、私は改正小文字の値で既存のファイル名を使用するように見えることはできません。 これについてどうすればよいですか?
8 files  rename  replace 

6
1つの列のすべての値を1に置き換えます
12行3列のテキストファイルが複数あります。 例: 2 6 0.74 42 6 0.58 80 6 0 112 6 0.24 132 6 1 216 6 0.7 342 6 0 390 6 0.21 432 6 0.56 466 6 0.75 524 6 0.6 646 6 0.9 すべての行で3番目の列のすべての値を1に設定したいと思います。 出力は次のようになります。 2 6 1 42 6 1 80 6 1 112 …

3
文字列内の特定の文字を削除する方法はLinuxでその行に数字がない場合のみ
私はこの一見修正が簡単な問題に困惑してきました...まあ、しばらくの間。 編集する必要があるファイルからの出力例を次に示します。 $cat file George Washington Geneva Convention 123,281,029 USD 342,019,929 EUR 「George Washington」と「Geneva Convention」の間のスペースを削除する必要がありますが、「123,281,029 USD」または「342,019,929 EUR」の間のスペースは削除しないでください。 基本的に、ここでの目標は、行に数字がない場合にのみ、行の単語間のスペースを削除することです。 私はを介してファイルを編集しようとしましたgrep -v [0-9] $file | sed 's/ //'が、それが機能する唯一の方法は、別のファイルに出力する場合ですが、それは古いファイルから新しいファイルへの番号のあるすべての行を除外することを意味します。 私はgrepを使ってかなりばかげたループをいくつか試しましたsedが、何も正しく動作しないようです。 ここでも、ファイルの出力例を示します。 $cat file George Washington Geneva Convention 123,281,029 USD 342,019,929 EUR これが私の望ましい出力です: $cat file GeorgeWashington GenevaConvention 123,281,029 USD 342,019,929 EUR
8 centos  sed  string  replace 

2
Bashを使用してバイナリファイルで2バイトを検索し、それらの値を増やして置き換えるにはどうすればよいですか?
バイナリファイル内の2バイトを見つけて、それらの2バイトの値を増やし、ファイル内で置き換えようとしています。これらの2バイトは、位置0x82-0x83にあります。今のところ、これを使用してこれらの2バイトを正常に抽出しました。 #!/usr/bin/env bash BYTES=$(tail -c +131 "$1" | head -c 2) これらのバイトには値があります1B 1F。私は立ち往生しています: バイトを整数に変換する方法は?694310進数でなければなりません。 バイナリデータをファイルに追加/エコーする方法 ファイル内の増加したバイトを位置0x82-0x83に書き込む方法。を使用することもできますがhead -c 130 original.bin >> new_file.bin && magic_command_writing_bytes_to_file >> new_file.bin && tail -c +133 original.bin、もっと良い方法があるはずです。 私はそれをPHPで行うことができますが、もっと簡単になるはずですが、bashでこれを行う方法に興味があります。


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