最新記事

grep 使用時に行番号を取得する 質問する
linux
shell
grep
line

grep 使用時に行番号を取得する 質問する

grep recursive を使用してファイル内の文字列を検索しています。一致したすべてのファイルとその文字列を含む行が端末に出力されます。しかし、それらの行の行番号も取得することは可能ですか? 例: 現在、 を取得しています/var/www/file.php: $options = "this.target"が、 を取得しようとしています。その文字列を含む行番号は/var/www/file.php: 1142 $options = "this.target";どこにあるのでしょうか。1142 再帰的にgrepするのに使用している構文はsudo grep -r 'pattern' '/var/www/file.php' パターンに等しくない場合の結果を取得するにはどうすればよいでしょうか? すべてのファイルと同様ですが、特定の文字列を含むファイルは除きます。

Admin

Git コミットで特定の単語を grep するにはどうすればいいですか? 質問する
git
search
grep
git-log

Git コミットで特定の単語を grep するにはどうすればいいですか? 質問する

Gitコードリポジトリで、特定の単語を含むすべてのコミットを一覧表示したい。これを試してみた git log -p | grep --context=4 "word" しかし、必ずしもファイル名が返されるわけではありません(検索した単語から5行以内でない限り)。また、 git grep "word" しかし、現在のファイルのみが提供され、履歴は提供されません。 特定の単語の変更を追跡できるように、履歴全体を検索するにはどうすればよいですか? 変更を追跡するために、コードベースで単語の出現を検索するつもりです (ファイル履歴で検索)。

Admin

Linux で grep を使用してファイル名だけを表示するにはどうすればいいですか? [closed] 質問する
linux
grep

Linux で grep を使用してファイル名だけを表示するにはどうすればいいですか? [closed] 質問する

終了しました。 この質問は Stack Overflow ガイドライン 現在回答を受け付けておりません。 この質問は、特定のプログラミング問題、ソフトウェアアルゴリズム、またはプログラマーが主に使用するソフトウェアツール質問がトピックに沿っていると思われる場合は、別の Stack Exchange サイト質問がどこで回答される可能性があるかを説明するコメントを残すことができます。 2年前に閉鎖されました。 コミュニティは8 か月前にこの質問を再開するかどうかを検討し、質問を閉じたままにしました。 元のクローズ理由は解決されませんでした この質問を改善する どのように使用すればいいですかグレップLinux でファイル名だけ (インライン一致なし) を表示するにはどうすればいいですか? 私は通常次のようなものを使用しています: find . -iname "*php" -exec grep -H myString {} \; 一致なしでファイル名(パス付き)だけを取得するにはどうすればいいですか?xargs? grep のマニュアルページにはこれを実行する方法が見つかりませんでした。

Admin

一部のinputrc文字列をgrepできません。
bash
grep
regular-expression
quoting
string

一部のinputrc文字列をgrepできません。

bind -p |grep -E "\\e.\":"働く しかし、 bind -p |grep -E "\\e\\C-.\":"動作しない いくつかの組み合わせを試しましたが、

Admin

端末コマンドで列名を識別する方法
linux
grep
terminal
man
filter

端末コマンドで列名を識別する方法

コマンド出力データから特定の列を選択/選択解除することが役に立つ場合もありますが、マンページにこれらの列が必ず名前でリストされるわけではありません。これらの名前をどのように見つけることができますか? 例えば 2 つのコマンドを実行して出力を表示します。 $ sudo journalctl -eu NetworkManager -o short Feb 06 06:52:56 user NetworkManager[713]: [1707206156.8193] device (tun0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'external') Feb 06 06:52:56 user NetworkManager[713]: [1707206156.8195] device (tun0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'external') Feb 06 06:52:56 user NetworkManager[713]: [1707206156.8207] device (tun0): Activation: successful, device activated. この出力には、6つの異なる列(強調表示のために類似名が付けられています)が含まれているようです。 日付、ユーザー、プロセス、タイプ、日付2、メッセージ 2番目のコマンドを実行すると、列にlsblk名前が割り当てられていることがわかります。 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT zram0 253:0 0 7.3G 0 disk [SWAP] nvme0n1 259:0 0 238.5G 0 disk --output以下を実行して必要な列を選択できます。columns $ lsblk --output NAME,SIZE NAME SIZE zram0 7.3G nvme0n1 238.5G man lsblkページは、他の多くのコマンドが提供しない列のヘルプを提供します。 -o, --output list Specify which output columns to print. Use --help to get a list of all supported columns. The columns may affect tree-like output. The default is to use tree for the column 'NAME' (see also --tree). The default list of columns may be extended if list is specified in the format +list (e.g., lsblk -o +UUID). マンページにリストされていない場合(選択または見つからない場合)、どのように列を識別して名前を付けますか?

Admin

grepファイルの20,000ワード
grep

grepファイルの20,000ワード

私のフォルダには5000個のファイルがあります。ファイル名はXX0000001~XX0005000です。 各ファイルから単語を取得し、その単語と他のファイル(target.txt)の次の行をgrepしようとしています。 私のXX*ファイルの中には、約30,000語が含まれています。 これを行う方法はありますか? 私は試した: start_number=0000001 end_number=0005000 words_file=target.txt output_folder="output_results" mkdir -p "$output_folder" for ((i=start_number; i <=end_number; i++)); do filename="XX$(printf "%07d" "$i")" output_file="$output_folder/output_${filename}.txt" while read -r word; do awk -v word="$word" '{for (i=1; i<=NF; i++) if($1 ~ word) {print; next}}' "$filename" >> "$output_file" done < "$words_file" done これを行うより速い方法がありますか?私のターゲットファイルには何百万もの検索があります。正確なターゲットファイルサイズは20GB、106441678行です。 例: XX0000001 ファイルは次のようになります。 Big1 Big5 Big7 Big10 Big11 (そして単語が多すぎます。一部のXXファイルには最大30,000単語が含まれる場合があります。) Target.txt ファイルは次のとおりです。 #Big1 This_is_a_file_containing_xxxxx #Big2 This_is_a_file_containing_xxxxx #Big3 This_is_a_file_containing_xxxxx #Big4 This_is_a_file_containing_xxxxx #Big5 This_is_a_file_containing_xxxxx #Big6 This_is_a_file_containing_xxxxx #Big7 This_is_a_file_containing_xxxxx #Big8 This_is_a_file_containing_xxxxx #Big9 This_is_a_file_containing_xxxxx #Big10 This_is_a_file_containing_xxxxx #Big11 This_is_a_file_containing_xxxxx #Big12 This_is_a_file_containing_xxxxx

Admin

glibc regex(7)/GNU sed/grep/egrep 正規表現でエスケープ回数を計算する最良の方法は何ですか?
sed
grep
regular-expression
posix

glibc regex(7)/GNU sed/grep/egrep 正規表現でエスケープ回数を計算する最良の方法は何ですか?

与えられた bash 環境変数の設定: $ declare -g bs=$'\\' bsbs=$'\\\\' q="'"; この正規表現は、一重引用符("'")テキストのシーケンスと正確に一致します。ここで、これらのテキストにはエスケープされた一重引用符を含めることができます。 "[${bs}${q}]((([^${bsbs}]?[^${bs}${q}])|(${bsbs}${bs}${q}))+)[${bs}${q}]" $ echo "[${bs}${q}]((([^${bsbs}]?[^${bs}${q}])|(${bsbs}${bs}${q}))+)[${bs}${q}]" [\']((([^\\]?[^\'])|(\\\'))+)[\'] (「[\ ']」の逆引用符は必ずしも必要ではありませんが、誰かがこの値を一重引用符で囲んだ文字列にエンコードしようとすると、明確にするために含まれます。) 問題は、これをエスケープ引用符で一般化する最善の方法と、入力エスケープ文字が奇数の長さ((n&1)== 1)サイズ(バイト数)の場合にのみ、複数のエスケープシーケンスの実行を処理する方法です。最後のエスケープはACTIVEで、最後の文字はINACTIVE(文字列の一部)です。それ以外の場合(エスケープ回数は偶数((n&1)==0))、文字列にはエスケープ回数の半分が含まれます(n>> 1)。最後の文字はACTIVE(つまりエスケープされていません)です。 また、sedとgrep / egrepにはいくつかの問題があります。 o一致するサブグループは、後続の「\ 1+」グループ番号を占めることで数字を増やすことができます。 - 後続グループが一致しない場合 - 理想的には、後続のサブグループ番号に影響を与える可能性があるサブグループなしでこの正規表現を表現できることを願っています。 o エスケープ番号をまったく処理せず、 エスケープ番号による参照もエスケープされないことを認識しません。 だから私の質問は次のようになります glibcサポートPOSIX REまたはgrep / sed REのみを使用してこれらの問題を解決するための最良の方法は何ですか? つまり。 RegExp内で、任意の長さの奇数(有効なエスケープ)または偶数(誤ったエスケープ)長のエスケープシーケンスを認識することを許可しますか? 私はPOSIX REがこの種の問題を処理するために、次の特殊な構文の利点を享受できると思います。 [\\]{1,}\#&1\?$A\:$B ここで '}#&1' は前の [\]{...} グループ 'x & 1' と一致する要素数のテストを意味し、 ?x:y は "最後のテストが true なら x を置き換えます。場合は、xを置き換えます」を意味します。 REのy」。 これにより、実際にはRegExp解析文字列内のすべてのエスケープの数に関係なく、簡単かつ安全に処理できます。このような新しいRE構文なしでこれを行うには? RegExp式のみを使用することは不可能でも実行不可能でもありませんが、非常に困難です。 それとも私が間違っていますか? これで、最新のPOSIX REで以前のセットの実行長に対して算術を実行する簡単な方法はありますか? 例1: $ declare -g bs=$'\\' bsbs=$'\\\\' q="'"; $ echo "'a quot\\'d string' 42" | sed -r 's/'"[${bs}${q}]((([^${bsbs}]?[^${bs}${q}])|(${bsbs}${bs}${q}))+)[${bs}${q}]"'[[:space:]]([0-9]+)/\1\t:\t\2/' 'a quot'd string : g 例2: $ echo "'a quot\\'d string' 42" | sed -r 's/'"[${q}]((([^${bsbs}]?[^${q}])|(${bsbs}${q}))+)[${q}]"'[[:space:]]([0-9]+)/\1\t:\t\2/' a quot\'d string : g @rowboatが言及した$ {bs} -esがどのように削除されたかを確認してください。結果は、$bsbs の代わりに $bs を使用した結果と同じです。 $ echo "'a quot\\'d string' 42" | sed -r 's/'"[${q}]((([^${bs}]?[^${q}])|(${bs}${q}))+)[${q}]"'[[:space:]]([0-9]+)/\1\t:\t\2/' a quot\'d string : g 結論として: 私はglibc、PCRE、PERL、cl-ppcre(SBCLのCommon Lisp REライブラリ)とEmacsのREライブラリによって提供される「regex(7) - POSIX.2正規表現」ライブラリの非POSIX拡張を開発しています。 o 名前付き POSIX 文字クラス (例: '[[:spaceesc:]]' または '[^[:space-esc:]]' または '[[) の接尾辞 "-esc" または "esc" の意味を定義します。 : quote-esc:]]' これは通常、文字クラス 'X' のメンバーである文字が文字クラス '${X}esc' ('${X}- の同義語) のメンバーではないことを意味します。 esc') IFFの前に出ます。奇数のエスケープ文字 ('\':ASCII "\x5c" ) があります。 All character sequences that are subject to an :*esc: character class test will have legal '\\' , '\xXX', '\0OOO', or '\Uxxxxxx' or '\uXXXX' sequences replaced by : ASCII:\x5c , ASCII:\xXX (where XX are hex digits), ASCII:\OOO (where OOO are Octal digits) , 24-bit unicode value with code point xxxxxx (x: hex digit) , and 16-bit unicode value with code point xxxx (x: hex digit) , respectively. Also '[[:quote:]]' and '[[:quoteesc:]]' classes must be supported that select characters (or non-escaped chars) with the Unicode 'Quotation Mark' binary attribute, and '[[:punct:]]' or '[[:punctesc:]]' would similarly apply to all (non-escaped) chars which have the Punctuation attribute. Perhaps a similar '*cesc' or '*escc' character class suffixes could be provided that support also the C escapes: '\n','\r','\t','\v','\b','\l'... etc. If the /

Admin

再帰パターン検索 - 出力形式:一致するファイルごとに、特定のファイル名「\ n」、行番号、および色一致「¥ n」文を印刷します。
awk
grep
text-formatting
special-characters

再帰パターン検索 - 出力形式:一致するファイルごとに、特定のファイル名「\ n」、行番号、および色一致「¥ n」文を印刷します。

Linuxでは、次のファイルコンテンツ検索コマンドが必要です。 md、txt、htm などの指定されたファイルを検索します。 フォルダとそのサブフォルダで繰り返し実行します(例:)。 コンテンツ検索は正規表現パターンである可能性があります(例:tomat。* es)。 一致する項目の周囲のテキストを出力します。 出力は次の形式です。、各ファイルを空行で区切ります。 file1 lineNr1:text1 lineNr2:text2 file2 lineNr1:text1 lineNr2:text2 6/最後の基準である出力は視覚的に明確でなければなりません。したがって、端末でgrepなどのカラースキームを使用してください。 ファイルの色はcolor_1(紫色など)です。 color_2のlineNr(例:緑) テキスト出力の場合: color_3のテキストを一致させます(例:赤)。 残りのテキストはcolor_4です(たとえば、白)。 もともと、grepはこれを行いますが、出力形式を変更したいと思います。、今すぐ: file1:lineNr1:text1 file1:lineNr2:text2 file2:lineNr1:text1 file2:lineNr2:text2 私が望むのは検索結果に集中することですが、ディレクトリ検索を行うときに検索結果の前にファイルパス名があると検索がより複雑になります。ファイルに一致する項目が複数ある場合。私が望むのは、各ファイルが自分が探しているものを直接見ることができることです。ファイル、サブフォルダ、一致が多いほど、明確なフォーカスが重要になります。 したがって、grepは長い出力を提供し、フォーカスを失います。おそらくgrepコマンドの新機能として要求する必要があります。 欲しいものに近いです。 test.txtに次の2つの文があるとします。 2023-09-25: after colon char does not output the sentence. 2023-09-25 outputs line as there is NO colon preceding match. 次に、次のcliを実行します。 grep -rwn --include=\*.{md,txt} -ie "output.*" --color=always | awk -F: '{if(f!=$1)print "\n"$1; f=$1; print $2 ":" $3;}' この例では、1行目の出力は「:」で停止し、2行目では美しい出力が表示されます。添付ファイルを参照 したがって、一致するテキストにコロン ":" が含まれていない場合、このクエリは操作を実行します。一致の周りにテキスト出力がないため、検索出力の使い勝手が悪くなります。 より複雑な例(txtファイルを添付できません): utf-8 encoded # We're interested in searching on the word: tomato or tomate in french In markdown file it can be put in bold using **tomatoes** In a html file, content is full of tags, put a word in bold can be put in many way, such as tomato Let's see what the search will return on these combinations: 1. At 6:45 will eat tomato soup. 2. Tomatoes were cooked for the soup recipe, but what time do we eat tomato soup? Isn't it six forty-five, aka 6:45? 3. Tomate en français 4. tomates: pluriel du mot tomate. Could be tricky to restrict search only on bilingual TOMATO's variation, as for instance in automatically, there is auTOMATically. Regular expression are of help. 一致が2つのサブフォルダにあると仮定すると、このCLIは次のように明確に説明します。 grep -rn --include=\*.{md,txt} -iP "tomat[eo]s*" --color=always | awk -F: '{if(f!=$1)print "\n"$1; f=$1; print $2 ":" $3;}' ただし、追加出力コロン文字 ":" 以降の内容は出力には現れません。、コロン ":" を ";" に変更すると、違いを見ることができます。 grep出力と比較 出力検索結果をプレーンテキストファイルにダンプしようとすると、カラースキームが失われると視覚情報が失われます。したがって、タグを含むhtmlファイルは色情報を回復します。これは、次のhtml出力で実行できます。:

file_1

lineNr1:beginning of surrounding matchSEARCH_PATTERNend of surrounding match
lineNr2:beginning of surrounding matchSEARCH_PATTERNend of surrounding match

file_2

lineNr1:beginning of surrounding matchSEARCH_PATTERNend of surrounding match
lineNr2:beginning of surrounding matchSEARCH_PATTERNend of surrounding match
スタイルクラスでカラースキームを取得できます。 さて、grepとawkを試してみましたが、他の組み合わせが仕事にとってより良いアイデアかもしれません。 ありがとう

Admin

スペースなしで長い文字列から短い文字列を取得する
grep
cat

スペースなしで長い文字列から短い文字列を取得する

空白のない大きな文字列を持つファイルがあります(例:「A」:123、「B」:456、「C」:789 ...)。 特定の数字の前後にX文字をインポートしたいと思います。値(例:「B」付近の値)。 ただし、catを使用すると、文字列にスペースがないため、文字列全体が返されます。 試してみましたが、cat time_series.json | grep "B" | cut -c1-50すべて戻ってきました。 試してみましたが、cat time_series.json | grep "B" | cut -b 1-400最初の部分だけを返します。 (文字列は中間にあります。) どうすればいいですか?

Admin

awkを使用してファイル内の文字列が見つかった場合、trueを返すにはどうすればよいですか?
shell-script
awk
grep

awkを使用してファイル内の文字列が見つかった場合、trueを返すにはどうすればよいですか?

次のファイルがあります。 xxxxx,aaaaaa,abab21323,ccccccc ファイルに変数として指定された文字列が含まれている場合は、特定のコマンドを実行するスクリプトが必要です。それ以外の場合は、別のコマンドを実行してください。 これは私のbashコードです。 #!/bin/bash var1=$1 if grep -Fq "$var1" Agenda.txt then ## SOME COMMANDS else ## SOME OTHER COMMANDS fi 動作しますがawk。

Admin