ලිනක්ස් හි ගොනු නාම පෙන්වීමට grep භාවිතා කරන්නේ කෙසේද?


1102

grepලිනක්ස් හි ගොනු නාම (පේළියේ නොගැලපීම්) පෙන්වීමට මා භාවිතා කරන්නේ කෙසේද ?

මම සාමාන්‍යයෙන් භාවිතා කරන්නේ:

find . -iname "*php" -exec grep -H myString {} \;

ගැලපීම් නොමැතිව ගොනු මාර්ග (මාර්ග සමඟ) ලබා ගන්නේ කෙසේද? මට භාවිතා කළ xargsයුතුද? මගේ grepමෑන් පිටුවේ මෙය කිරීමට ක්‍රමයක් මා දුටුවේ නැත .


3
ඔබ අදහස් කළේ, ඔබට අවම වශයෙන් එක් ගැලපීමක් ඇති ගොනු නාම අවශ්‍යද?
leonbloy

4
නියම ප්‍රශ්නය. මම ඇත්ත වශයෙන්ම මෙය භාවිතා කිරීමට පටන් ගත්තේ Vim හි grep විසින් ආපසු ලබා දුන් ගොනු ලැයිස්තුවක් විවෘත කිරීමට ය. vim $(grep -rl Something app/)
ඩේවිඩ් ටුවයිට්

1
ඔබට grep විධානය භාවිතයෙන් ලිපිගොනු ලැයිස්තුගත කළ නොහැක, එය මූලික වශයෙන් භාවිතා කරන්නේ ගොනුවකින් හෝ ලැයිස්තුවකින් අපේක්ෂිත පෙළ ලබා ගැනීමට ය. උදාහරණයක් ලෙස, ps aux | grep 'apt-get' හෝ grep 'text-to-find' / path / to / file /
iamjayp

Answers:


1675

සම්මත විකල්පයට grep -l(එය කුඩා අකුරක් L) මෙය කළ හැකිය.

සිට යුනික්ස් සම්මත :

-l
    (The letter ell.) Write only the names of files containing selected
    lines to standard output. Pathnames are written once per file searched.
    If the standard input is searched, a pathname of (standard input) will
    be written, in the POSIX locale. In other locales, standard input may be
    replaced by something more appropriate in those locales.

-Hමෙම අවස්ථාවේ දී ඔබට ද අවශ්ය නොවේ .


37
මෙම විකල්පයේ ප්‍රලේඛනය (බොහෝ විට බොහෝ ගොනු ලිපිගොනු වල) එතරම් අපැහැදිලි ය! Pfff… මිනිසා බූරුවාට වේදනාවක් වන්නේ කෙසේද යන්න පුදුම සහගතය.
මොන්සියර් ඩාර්ට්

1
-එච් ද තරඟ පෙන්වයි. ප්‍රශ්නය වූයේ ගොනු නාම සඳහා පමණි.
හෝක්

Au හාක් සහ මගේ පිළිතුර -l. මා සඳහන් කළේ -H පමණක් ප්‍රශ්නයේ පරිශීලකයාගේ විධානය -H ඇතුළත් කර ඇති නිසා සහ -l ලබා දුන් විට එය අතිරික්ත වේ.
Random832

2
හොඳයි, මම grep -nrl "some text" .නැවත නැවත
උප ෆෝල්ඩර

එල් සඳහා සිහිවටන කුමක්ද?
ජොයෙල්ෆාන්

144

සිට grep(1)මිනිසා පිටුව:

  -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

4
පළමු තරගය නතර කිරීම අවශ්‍ය වන අතර ස්වභාවය.
තොම්සන්

8
ප්‍රලේඛනය එය ටිකක් අපැහැදිලි කරයි. "පළමු තරගය මත ස්කෑන් කිරීම නතර වනු ඇත" - සියලු ගොනු නාම මුද්‍රණය වන බව පෙන්නුම් කරයි, නමුත් ගැලපෙන වචනය පරිලෝකනය කිරීම පළමු අවස්ථාවේදීම නතර වේ.
TheMonkWhoSoldHisCode

2
Is විශාල්ප්: සිදුවීම් කොතැනදැයි අපට ප්‍රශ්නයක් නැති නිසා, ඒවා පවතින්නේ පමණක් නිසා, පළමු සිදුවීමෙන් ඔබ්බට එක් එක් ගොනුව සෙවීමේ තේරුමක් නැත.
ඉග්නේෂියෝ වස්කස්-ඒබ්‍රම්ස්

17
@ ඉග්නේෂියෝ වාස්කේස්-ඒබ්‍රම්ස් හරියටම. ලේඛනයේ පළමු හැඟීම එය මුද්‍රණය කරන්නේ පළමු ගොනුවේ ගොනු නාමය පමණක් බව ඔබට හැඟේ. එය තේරුම් ගැනීමට ඔබට ඇත්ත වශයෙන්ම කියවීම් කිහිපයක් අවශ්‍ය වේ.
TheMonkWhoSoldHisCode

5
'වත්මන් ගොනුව පරිලෝකනය කිරීම පළමු තරගය සමඟම නතර වේ.' වඩා පැහැදිලි වනු ඇත.
sorrymissjackson

37

සරල ගොනු සෙවීමක් සඳහා ඔබට grep -lසහ -rවිකල්ප භාවිතා කළ හැකිය :

grep -rl "mystring"

සියලුම සෙවීම් සිදු කරනු ලබන්නේ grep විසිනි. ඇත්ත වශයෙන්ම, ඔබට වෙනත් පරාමිතියක ගොනු තෝරා ගැනීමට අවශ්‍ය නම්, නිවැරදි විසඳුම සොයා ගන්න:

find . -iname "*.php" -execdir grep -l "mystring" {} +

මෙම execdirවිකල්පය එක් එක් ඩිරෙක්ටරියට එක් එක් grep විධානයක් ගොඩනංවන අතර ගොනු නාමයන් එක් විධානයකට පමණක් සංයුක්ත කරයි ( +).


1

ඔබේ ප්‍රශ්නය මම ගොනු නාම ලබා ගන්නේ කෙසේද (මාර්ග සමඟ)

ඔබේ සින්ටැක්ස් උදාහරණය සොයා ගන්න. -iname "* php" -exec grep -H myString {} \;

මගේ විධාන යෝජනාව

sudo find /home -name *.php

මගේ ලිනක්ස් මෙහෙයුම් පද්ධතියේ මෙම විධානයෙන් ලැබෙන ප්‍රතිදානය:

compose-sample-3 / html / mail / contact_me.php

ඔබට මාර්ගය සහිත ගොනු නාමය අවශ්‍ය බැවින්, විනෝද වන්න!


ප්‍රශ්නය විශේෂයෙන් අසන්නේ ඔවුන් grep භාවිතයෙන් ගොනු නාම ලබා ගන්නේ කෙසේද යන්නයි .
snakecharmerb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.