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

ファイル内のテキストパターンを検索するコマンドラインツールであるgrepに関する質問。このタグは、grep自体に関する質問、またはgrepコマンドラインツールの使用から生じる問題に関する質問に使用します。

4
sed / awkを使用して最初のスペースの後にあるものを削除する
aaaaaaaa 09 bbbbbbbb 90 ccccccccccccccc 89 ddddd 09 sed / awk / replaceを使用して、上記のテキストでは、各行の最初のスペースの後にあるすべてのものを削除します。たとえば、出力は次のようになります。 aaaaaaaa bbbbbbbb ccccccccccccccc ddddd 任意の助けをいただければ幸いです。
20 sed  grep  awk 

3
catを介してパイプされた場合、grepはEOFまで出力されません
この最小限の例を考えると ( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) それを出力LINE 1し、その後、1秒後に、出力はLINE 2、として期待されます。 これをパイプすると grep LINE ( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE 振る舞いは前のケースと同じで、予想通りです。 あるいは、これを cat ( echo "LINE 1" ; sleep 1 ; echo "LINE 2" …
19 bash  grep  pipe 

2
CPUを実行していないとき、grepは何をしますか?
で一致するものを探すgrepと、その後の検索にかかる時間が最初の検索よりもはるかに短いことに気づくことがよくあります(例:25秒対2秒)。明らかに、それは最後の実行からのデータ構造を再利用することによるものではありません-それらは割り当て解除されるべきでした。でtimeコマンドを実行するとgrep、興味深い現象に気付きました。 real 24m36.561s user 1m20.080s sys 0m7.230s 残りの時間はどこに行くのですか?毎回高速に実行するためにできることはありますか?(たとえば、ファイルをgrep検索する前に、別のプロセスにファイルを読み取らせます。)
19 grep  performance 

2
Grep:manページから見出しの単語を検索すると予期しない結果
macOSでmanページをgrepしようとすると、奇妙な動作になります。たとえば、Bashのマニュアルページには次の文字列が明確に記載されていますNAME。 $ man bash | head -5 | tail -1 NAME そして、私がgrepしnameた場合、結果が得られますが、私がgrepした場合、結果は得られNAMEません: $ man bash | grep 'NAME' $ man bash | grep NAME 私はそこにあることがわかっている他の大文字の単語を試しましたが、SHELLyields を検索すると何も得られませんが、BASHyieldsを検索すると結果が得られます。 何が起きてる? 更新:すべての回答をありがとう!これに遭遇したコンテキストを追加する価値があると思いました。ラップするbash関数を作成したかったのでman、シェルビルトインのマニュアルページを検索しようとした場合は、Bashのマニュアルページの関連セクションにジャンプしてください。より良い方法があるかもしれませんが、ここに私が現在持っているものがあります: man () { case "$(type -t "$1")" in builtin) local pattern="^ *$1" if bashdoc_match "$pattern \+[-[]"; then command man bash | less …

5
論理演算子を使用したgrep
論理演算子を使用してgrep検索を実行できるようにするgrepのようなユーティリティはありますか。論理構造を自由にネストおよび結合できるようにしたいと考えています。たとえば、次のようなものが可能です。 grep (term1 && term2) || (term1 && (term3 xor term4)) * これはバニラのgrepと追加のbashスクリプトを使用して実行できることを理解していますが、ここでの目標はそれを回避することです。
19 grep 

5
行頭の^アンカーが機能していても、行末の$アンカーがgrepコマンドで機能しないのはなぜですか?
UNIXには非常に新しいですが、プログラミングには新しいものではありません。MacBookでターミナルを使用します。クロスワード構築のために単語リストを管理および検索するために、Grepコマンドとそのバリエーションを手に入れようとしています。かなり簡単そうに思えますが、単純なケースだと思っていたものに早く夢中になります。 私が入るとき grep "^COW" masternospaces.txt 欲しいものが得られます。COWで始まるすべての単語のリストです。 しかし、私が入るとき grep "COW$" masternospaces.txt COWで終わる単語のリストを取得する予定です(そのような単語は多数あります)が、何も返されません。 このファイルはプレーンテキストファイルで、すべての行がすべて大文字で単語(またはスペースを含まない単語フレーズ)になっています。 ここで何が起こっているのでしょうか?
19 grep  newlines 

3
grep出力から非常に長いテキスト行を持つファイルを除外します
私は頻繁にgrepコマンドを実行してコード内の項目を見つけますが、Webプロジェクトの問題は、1行の巨大なテキスト行を作成する圧縮されたJavaScriptファイルとCSSファイルがあることが多いため、一致が見つかった場合、ターミナルウィンドウ全体が1000行を超えて入力されているため、探しているものを見つけるのは非常に非現実的です。 だから、200文字以上のテキストの単一行と言っているファイルを避ける方法はありますか?
18 grep 

11
巨大なファイルから膨大な数のパターンをGrep
私は1日に約200,000行成長しているファイルを持っていますが、すべて3行のブロックで構成されています。 1358726575123 # key Joseph Muller # name carpenter # job 9973834728345 Andres Smith student 7836472098652 Mariah Anthony dentist これで、別のファイルから約10,000個のキーパターンを抽出できます1358726575123。次にfor、これらのパターンでループを実行し、最初のファイルと照合する必要があります。ファイルにそのようなパターンが含まれていない場合、さらに処理するためにパターンを3番目のファイルに保存します。 for number in $(grep -o '[0-9]\{12\}' file2); do # finds about 10.000 keys if ! grep -q ^$number$ file1; then # file1 is a huge file printf "$number\n" >>file3 # …
18 grep  awk  database  text 


4
stdoutへの出力と同時にファイルへのgrep
テキストをに出力するスクリプトがありますstdout。ターミナルでこのすべての出力を確認し、同時にいくつかの行をフィルタリングしてファイルに保存したいです。例: $ myscript Line A Line B Line C $ myscript | grep -P 'A|C' > out.file $ cat out.file Line A Line C ターミナルで最初のコマンドの出力を確認し、2番目のコマンドの出力をファイルに保存します。同時に。私が使ってみteeて、より良い、ない結果、または逆の結果。
18 grep  pipe  stdout  tee 

5
重複を削除しながら2つのリストをマージする
Busybox(OpenWRT)を使用した組み込みLinuxシステムがあるため、コマンドが制限されています。次のような2つのファイルがあります。 最初のファイル aaaaaa bbbbbb cccccc mmmmmm nnnnnn 2番目のファイル mmmmmm nnnnnn yyyyyy zzzzzz これら2つのリストを1つのファイルにマージし、重複を削除する必要があります。 私たちは偉大なを使用して取得して(スペースが限られている)の差分を持っていないawk、sedとgrep(または標準Busyboxのインスタンスに含まれている場合があります他のツール)。次のようなマージファイルに移動します。 command1 > mylist.merge command2 mylist.merge > originallist 大丈夫です。単一行のコマンドである必要はありません。 私が使用しているBusyboxのインスタンスで現在定義されている関数(デフォルトOpenWRT):[、[[、arping、ash、awk、basename、brctl、bunzip2、bzcat、cat、chgrp、chmod、chown、chroot、clear、cmp、 cp、crond、crontab、cut、date、dd、df、dirname、dmesg、du、echo、egrep、env、expr、false、fgrep、find、free、fsync、grep、gunzip、gzip、halt、head、hexdump、 hostid、hwclock、id、ifconfig、init、insmod、kill、killall、klogd、less、ln、lock、logger、logread、ls、lsmod、md5sum、mkdir、mkfifo、mknod、mktemp、mount、mv、nc、netmsg、 netstat、nice、nslookup、ntpd、passwd、pgrep、pidof、ping、ping6、pivot_root、pkill、poweroff、printf、ps、pwd、reboot、reset、rm、rmdir、rmmod、route、sed、seq、sh、sleep、 sort、start-stop-daemon、strings、switch_root、sync、sysctl、syslogd、tail、tar、tee、telnet、telnetd、test、time、top、touch、tr、traceroute、true、udhcpc、umount、uname、uniq、uptime、vconfig、vi、watchdog、wc、wget、which、xargs、yes、zcat
18 bash  grep  sed  awk  busybox 

3
検索をgrep -vにパイプする
特定の種類で、特定の文字列を含まないすべてのファイルを検索しようとしています。findをgrep -vにパイプすることでそれを試みています 例: find -type f -name '*.java' | xargs grep -v "something something" これは機能しないようです。findコマンドで見つかったすべてのファイルを返すだけのようです。私がやろうとしているのは、基本的に特定のファイル名に一致するすべての.javaファイル(たとえば、SessionPb.javaのように「Pb」で終わる)を見つけ、その中に「extends SomethingSomething」がないことです。 私の疑いは、私がそれを間違っているということです。では、コマンドはどのように見えるのでしょうか?
18 grep  find  pipe 


2
journalctlの選択可能なユニットのリスト
CentOS 7サーバーで、journalctlログを生成できる選択可能なユニットのリストを取得したい。これを達成するために次のコードを変更するにはどうすればよいですか? journalctl --output=json-pretty | grep -f UNIT | sort -u CentOS 7ターミナルでは、上記のコードはを生成しgrep: UNIT: No such file or directoryます。 編集: 次のJavaプログラムは、目的のgrepからの出力を出力せずに終了しています。ターミナルバージョンに加えてjavaプログラムが動作するように、どうすれば変更できますか? String s; Process p; String[] cmd = {"journalctl --output=json-pretty ","grep UNIT ","sort -u"}; try { p = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); while ((s = br.readLine()) != …
18 grep  systemd 

4
パイプを使用したgrepがここで機能しないのはなぜですか?
次のコマンドがあります: find / -name libGL.so.1 「Permission denied」で多くの行を返します。そのような行を除外したいので、次を追加しました: find / -name libGL.so.1 | grep -v 'denied' しかし、出力は同じです-私grep -v 'denied'は行をフィルタリングしませんPermission denied。私は多くのバリエーションを試し、grepチュートリアルを調べましたが、問題を理解することはできません。助言がありますか?
18 shell  grep  pipe 

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