最新記事

Busyboxユーティリティを使用してファイルの最後の文字の前にコンテンツを追加するにはどうすればよいですか?
awk
sed
grep
json
busybox

Busyboxユーティリティを使用してファイルの最後の文字の前にコンテンツを追加するにはどうすればよいですか?

内容を含むファイルがあります。 { "first_name": "John", "last_name": "Smith", "is_alive": true, "age": 27, "address": { "street_address": "21 2nd Street", "city": "New York", "state": "NY", "postal_code": "10021-3100" }, "phone_numbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [ "Catherine", "Thomas", "Trevor" ], "spouse": null } ファイルの内容が次のように表示されるように、Busyboxユーティリティを使用してファイルの最後の文字の前に内容を追加するにはどうすればよいですか。 { "first_name": "John", "last_name": "Smith", "is_alive": true, "age": 27, "address": { "street_address": "21 2nd Street", "city": "New York", "state": "NY", "postal_code": "10021-3100" }, "phone_numbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [ "Catherine", "Thomas", "Trevor" ], "spouse": null, "field1": "value1", "field2": "value2", "field3": "value3", "field4": "value4" } ただし、}文字が必ずしもファイルの最後の文字または最後の行にある必要はありません。 これまで私はこの解決策を見つけました。 tac file2 | sed '0,/}/s/}/}\n"field4": "value4"\n"field3": "value3",\n"field2": "value2",\n"field1": "value1",\n,/' | tac>tmp_file && mv tmp_file file2

Admin

grep正規表現を使用した2つのディレクトリの除外
grep
regular-expression

grep正規表現を使用した2つのディレクトリの除外

これSEの答えは、正規表現とgrepを使ってディレクトリを除外できることに気づきました。ただし、以下を使用すると機能しません|。 results=$(grep --color=always -rnF "$searchTerm" . --exclude-dir='.[^.]*|node_modules') results=$(grep --color=always -rnF "$searchTerm" . --exclude-dir='.[^.]*\|node_modules') ピリオドと node_modules で始まるディレクトリが除外されるように、この正規表現を作成する別の方法はありますか?

Admin

grep --quietの終了状態に問題がありますか?
grep
gnu
sles

grep --quietの終了状態に問題がありますか?

grep バージョン 2.16 がインストールされている SLES 12 SP5 システムがあり、1 つのシステムでは、grep --quiet次の条件を含むスクリプトを大量に使用します。 # $pid_list contains the result of pstree and $script_pid equals $$ if echo "$pid_list" | grep -qF "($script_pid)"; then continue fi if echo "$pid_list" | grep -qF "($script_pid)"; then echo "Error: grep has a bug!" continue fi 最初の条件が失敗する確率は約0.1%で、2番目の同じ条件が成功する確率は2倍になりますか? ! 次のように条件を変更すると完全に機能します(フルコードここ): if echo "$pid_list" | grep -F "($script_pid)" >/dev/null; then continue fi マニュアルに関しては、このquietオプションは期待どおりに機能するはずです。エラーが発生した場合はtrueを返す必要があります。 一致するものが見つかると、エラーが検出された場合でも状態0で直ちに終了します。 それで、なぜ失敗するのか混乱しています。マシンのRAMとファイルシステムの両方が正常です。 grepバイナリにも正しいファイルハッシュがあります。 私検索を送信しかし、私が見つけた唯一のこと2001年から、これは次の一部でなければなりません。2.16 2014年から。 アップデート1 @kamilが提案したようにサブシェルを試してみましたが、それでも失敗します(時には「競合条件」エラーが表示されます)。 if (echo "$pid_list"; true) | grep -qF "($script_pid)"; then continue elif (echo "$pid_list"; true) | grep -qF "($script_pid)"; then echo "Error: Race condition!" continue fi 代わりに、次のように動作します。 if echo "$pid_list" | grep -qF "($script_pid)" || [[ $? -eq 141 ]]; then continue fi

Admin

n本以上のラインがある場合のみパイプ出力
grep
pipe
tail
head

n本以上のラインがある場合のみパイプ出力

私はしばしばいくつかのヘッダ行を含むプロセスの出力を知りたいと思います。ただし、grepが実際のコンテンツ行をすべて削除する場合は、ヘッダー行を表示したくありません。これを行うにはthisに似たコマンドが必要ですtailが、n行を返すのではなく次のものを返します。みんな行(タイトル)がn個以上の場合にのみ適用されます。 同僚はこれを行うために小さなPythonツールを作成しましたが、これを行うために必要なすべてのコンピュータにそれをインストールする必要があります。 標準ツール(おそらくawk?)を使用してこの効果を得るための短いコマンドラインはありますか?

Admin

テキストファイルで英語の単語を含む文字列を検索する
grep
text

テキストファイルで英語の単語を含む文字列を検索する

以下は入力例です。 PAMA Pamc PaML Panel00 PanelBrightnessLimits PanelBrightnessParamsX PanelPWMDutyRange PanelPWMFrequency 私は欲しい: Panel00 PanelBrightnessLimits PanelBrightnessParamsX PanelPWMDutyRange PanelPWMFrequency つまり、「a」、「the」、「it」、「i」、「ok」などの非常に単純な単語は除外されるため、少なくとも3文字の英語の単語だけを話します。

Admin

grep: 各行の色のみの最初の一致
grep

grep: 各行の色のみの最初の一致

INPUT | grep --color=always "$string\{1,1\}" ...ああ、$ stringのすべてのインスタンスが強調表示されます。文書を読むとき、「{1,1}」は最初のインスタンスのみを強調表示する必要があります。それとももっと良いツールがありますか? sed は使用できません INPUT | sed -r "s|$string|${red}$string${nrm}|I" (${red}と${nrm}はカラーコードのみです) ここでINPUTは大文字と小文字を区別せずに見つけることができるファイルのリストなので、sedの「I」オプションを使用すると、ファイルリストの大文字と小文字がコマンド入力の正確なテキストに変わります。つまり、はい、大文字と小文字を区別しないファイルを検索したいが、ファイルリスト内の文字列の大文字と小文字に関係なく強調表示されます。 my_command *file_name* ...大文字と小文字を区別せずにファイルを見つけるために「検索」を使用しますが、リストで強調したいことは次のとおりです。 file_name FILE_nAME file_NAME_this_file_has_a_long_file_name ...しかし、最初の場合にのみ適用されます(ファイル名に入力文字列の重複を含めることができます)。したがって、上記の最後の行では「file_NAME」は強調表示されますが、「file_name」は強調表示されません。 grepは大文字と小文字の問題に問題はありませんが、sedには問題があります。 OTOH、sedは試合後に停止する方法を知っていますが、grepはわからないようです。それとももっと良い方法がありますか?

Admin

文字列grepコマンドで変数を使用する方法
grep

文字列grepコマンドで変数を使用する方法

というファイルに関連するさまざまな情報を提供する機能がありますCODESFILE-00001.DAT。 関数内では、次のコマンドは正しく機能し、次を含む行を返します00202200USER。 strings CODESFILE-00001.DAT | grep 00202200USER CODESFILE-00001.DATしかし、スクリプト全体に変数を挿入するのではなく、1つの変数を使用して毎週バージョンを変更する.DATときは、スクリプトの7項目すべての代わりに変数を変更するだけです(検索と置換が優れていることを知っていますが)。変数でファイル名を設定することが可能な場合) 変数を次に設定したfilename=CODESFILE-00001.DAT後、次を試しましたが成功しませんでした。 strings $filename | grep 00202200USER strings “$filename” | grep 00202200USER

Admin

httpieコマンドの出力を印刷し、grepにパイプします。
bash
shell
grep
pipe
http

httpieコマンドの出力を印刷し、grepにパイプします。

httpieリクエストの出力を印刷してgrepにパイプしてリクエストが成功したか失敗したかを確認するにはどうすればよいですか? http --print=hb POST http://localhost:8080 | grep -c "HTTP/1.1 200" && echo "succeeded" && exit 0 || echo "failed" && exit 1 私はxargsを使ってみました。 http://localhost:8080 | xargs sh -c 'response=$1' sh | grep ... しかし、うまくいきませんでした。何のアイデアもありません。

Admin

複数のテキストでパスリストをフィルタリングする方法は?
shell-script
grep
zsh

複数のテキストでパスリストをフィルタリングする方法は?

複数のパスを含むテキストファイル(.txt)があり、それをフィルタリングしてパスのリストだけを残したいと思います。 ファイルは次のとおりです。 Loremipsumdolorsitametconsecteturadip"/one/path/I_want_to_keep"iscingelitseddoeiusmodtemporincididuntutlaboreetdoloremagnaaliqua Utenimadminimveniamquisnostrudexercitationul"/another/path/I_want_to_keep"lamcolaborisnisiutaliquipexeacommodoconsequat Duisauteiruredolorinreprehenderitinvoluptatevelitess"/another/path/I_want_to_keep"ecillumdoloreeufugiatnullapariatur Excepteursintoccaecatcupidatatnonproident"/another/path/I_want_to_keep"suntinculpaquiofficiadeseruntmollitanimidestlaborum 例に示されているパスには引用符( "")で囲まれた3つのスラッシュ(/)があり、パスの最後の部分はアンダースコア(_)で区切られた複数の単語であり、周囲のテキストには特定のパターンはありません。 私はzsh 5.8(x86_64-apple-darwin21.0)を使用しています。

Admin

VimまたはSedの複雑な検索と置換
sed
grep
vim
search
replace

VimまたはSedの複雑な検索と置換

私は次のものを持っています(フォーマットを保存するために私の登録から削除されました。おそらくそれが私がここにいる理由です)。

  • Concrete Patching ()
  • Paving ()
  • 私はそれが次になりたいと思います:
  • Concrete Patching (flag)
  • 、それはすべてです。 編集する: 各タグ内の文字列は
  • (...どの文字列でも構いません。それぞれの最初の文字を削除して
  • まですべて保持し、(最大まですべてに)置き換えたいと思いますflag。明確にできず申し訳ありません。 このパターンはディレクトリ内のすべてのファイルに表示されるため、バッチ操作を使用するのがsed理想的ですが、それについては確信がありません。Vim単一のバッファを使用してプルされた:%s/"レジスタをコマンドに入れて、エスケープしたい項目(<\/span>newlinesなど)をエスケープしようとしましたが、\r正しく実行できませんでした。 上記のように複雑なフルブロックで簡単にプラグインを実行できるプラグインがあれば使用しますが:%s、そのどれも私が必要な方法で正しく実行するために必要な正規表現パターンを尊重しないようです。 私は仕事でほぼ同じテキストをたくさん置き換えて手動で編集するのに数時間かかりますが、正規表現パターンを使用すると数分かかることがあります。どんな提案でも自由に送ってください。

    Admin

  • Linux でバイナリ grep を使用するには? 質問する
    linux
    binary
    grep

    Linux でバイナリ grep を使用するには? 質問する

    次のバイナリ ファイルを生成したとします。 # generate file: python -c 'import sys;[sys.stdout.write(chr(i)) for i in (0,0,0,0,2,4,6,8,0,1,3,0,5,20)]' > mydata.bin # get file size in bytes stat -c '%s' mydata.bin # 14 0x00そして、 grep のような構文を使用して、すべてのゼロ ( ) の位置を見つけたいとします。   今のところ私ができる最善のことは、次のとおりです。 $ hexdump -v -e "1/1 \" %02x\n\"" mydata.bin | grep -n '00' 1: 00 2: 00 3: 00 4: 00 9: 00 12: 00 ただし、これは元のバイナリ ファイルの各バイトを暗黙的にマルチバイト ASCII 表現に変換してgrep操作します。これは最適化の典型的な例とは言えません :) Linux 用のバイナリのようなものはありますかgrep? おそらく、正規表現のような構文をサポートするだけでなく、バ​​イト「文字」もサポートするもの、つまり、 ' a(\x00*)b' のようなものを記述して、バイト 'a' (97) と 'b' (98) の間にあるバイト 0 の '0 回以上の' 出現に一致させることができるでしょうか? 編集: コンテキストとしては、8 ビット データをキャプチャするドライバーに取り組んでいます。キロバイトからメガバイトに及ぶ可能性のあるデータに問題が発生し、特定のシグネチャとその発生場所を確認したいと考えています。(今のところ、キロバイト単位のスニペットを扱っているので、最適化はそれほど重要ではありません。しかし、メガバイト単位のキャプチャでエラーが発生し、それを分析する必要がある場合は、もっと最適化されたものが欲しくなると思います。特に、バイトを文字として「grep」できるものが欲しいです。hexdumpバイトごとに文字列を検索するように強制されます。) 編集2: 同じ質問ですが、フォーラムが違います :)バイナリファイル内のバイトシーケンスをgrepする 編集3: @tchristの回答のおかげで、ここにも「grepping」とマッチング、そして結果を表示する例があります(OPと全く同じ質問ではないが): $ perl -ln0777e 'print unpack("H*",$1), "\n", pos() while /(.....\0\0\0\xCC\0\0\0.....)/g' /path/to/myfile.bin ca000000cb000000cc000000cd000000ce # Matched data (hex) 66357 # Offset (dec) 一致したデータをそれぞれ 1 バイト (2 つの 16 進文字) としてグループ化するには、一致した文字列のバイト数と同じ数だけ「H2 H2 H2 ...」を指定する必要があります。一致した ' .....\0\0\0\xCC\0\0\0.....' は 17 バイトをカバーするため、Perl では ' ' と記述できます"H2"x17。これらの「H2」はそれぞれ別の変数 (リストの場合と同様) を返すため、joinそれらの間にスペースを追加するためにも使用する必要があります。 $ perl -ln0777e 'print join(" ", unpack("H2 "x17,$1)), "\n", pos() while /(.....\0\0\0\xCC\0\0\0.....)/g' /path/to/myfile.bin ca 00 00 00 cb 00 00 00 cc 00 00 00 cd 00 00 00 ce 66357 そうですね...確かに Perl は「バイナリ grep」機能が非常に優れていることは認めざるを得ません :) 構文を正しく学習すればですが :)

    Admin