වචනාර්ථයෙන් ටැබ් භාවිතා නොකර ටැබ් සඳහා අඹරන්නේ කෙසේද සහ වැඩ නොකරන්නේ ඇයි?


163

(E) grep සහිත ගොනුවක ටැබ් සෙවීමේදී මම භාවිතා කරන්නේ ලිටරල් ටැබ් ( ^v + <tab>) ය. \tසාමාන්‍ය ප්‍රකාශනවල ටැබ් වෙනුවට ආදේශකයක් ලෙස මට භාවිතා කළ නොහැක . උදා: මෙම ප්‍රකාශනය ඉතා හොඳින් ක්‍රියාත්මක වේ.

එබැවින් ලිටරල් නොවන ආදේශකයක් භාවිතා කිරීමට හැකියාවක් තිබේද <tab>සහ වැඩ නොකරන / අර්ථ නිරූපණය නොකරන පසුබිම් \tමොනවාද?


Answers:


229

අයිතිය සුරකියි විසින් අර්ථ දක්වන ලද සාමාන්ය ප්රකාශනයක භාවිතා POSIX . කුමන හේතූන් නිසා POSIX \tටැබ් ලෙස අර්ථ දක්වා නොමැත .

ඔබට විකල්ප කිහිපයක් තිබේ:

  • perl විසින් අර්ථ දක්වා ඇති පරිදි සාමාන්‍ය ප්‍රකාශන භාවිතා කිරීමට grep ට කියන්න (perl \tටැබ් ලෙස ඇත):

    grep -P "\t" foo.txt

    මෙය "පර්යේෂණාත්මක" අංගයක් බව මෑන් පිටුව අනතුරු අඟවයි. අවම වශයෙන් \tහොඳින් වැඩ කරන බව පෙනේ. නමුත් වඩා දියුණු පර්ල් රීජෙක්ස් විශේෂාංග නොතිබිය හැකිය.

  • ඔබ සඳහා ටැබ් අක්ෂරයක් මුද්‍රණය කිරීමට printf භාවිතා කරන්න:

    grep "$(printf '\t')" foo.txt
  • වචනාර්ථයෙන් ටැබ් අක්‍ෂරය භාවිතා කරන්න:

    grep "^V<tab>" foo.txt

    එනම්: ටයිප් කරන්න grep ", ඉන්පසු ඔබන්න ctrl+v, පසුව ඔබන්න tab, පසුව ටයිප් කරන්න " foo.txt. දැවෙන ctrl+vපර්යන්තය මූලයන් වදාල ගත යුතු ඉදිරි යතුර. එයින් අදහස් වන්නේ ටැබ් යතුරට බැඳී ඇති යම් ශ්‍රිතයක් අවුලුවනවා වෙනුවට ටර්මිනලය ටැබ් අක්ෂරයක් ඇතුළු කරනු ඇති බවයි.

  • bash හි ansi c උපුටා දැක්වීමේ ලක්ෂණය භාවිතා කරන්න :

    grep $'\t' foo.txt

    මෙය සියලුම කවච වල ක්‍රියා නොකරයි.

  • awk භාවිතා කරන්න:

    awk '/\t/'
  • sed භාවිතා කරන්න:

    sed -n '/\t/p'

POSIX සහ වෙනත් පද්ධතිවල අර්ථ දක්වා ඇති අක්ෂර පංති පිළිබඳ දළ විශ්ලේෂණයක් සඳහා සාමාන්‍ය ප්‍රකාශන පිළිබඳ විකිපීඩියා ලිපිය බලන්න .


එන්සෝටිබ්ගේ පිළිතුර මත පදනම්ව මට පහත සඳහන් දෑ එකතු කිරීමට ඉඩ දෙන්න: grep $'\t' foo.txt(නමුත් මම සාමාන්‍යයෙන් fgrepඒ වෙනුවට ලියමි grep)
වෝල්ටර් ට්‍රොස්

පරිසර විචල්‍යයක අගය භාවිතා කිරීම සමඟ මට මෙය අවශ්‍ය විය. මම පාවිච්චි grep "$(printf '\t')${myvar}" foo.txtකළා. එය හොඳින් ක්‍රියාත්මක විය. උත්සාහයන් කිහිපයක් සමඟ, මට අවසන් පෝරමය වැඩ කිරීමට නොහැකි විය.
sancho.s ReinstateMonicaCellio

1
සරල ලෙස ටැබ් ලෙස grepඅර්ථ නිරූපණය කිරීමට සරල හේතුවක් \tනොමැතිද? POSIX ට \tඑයින් අදහස් කරන්නේ වෙනත් දෙයක්ද? සමහර විට එය වචනානුසාරයෙන් \ පසුව අනුරූප විය tයුතුද?
ආරොන් මැක්ඩේඩ්

BSD (OSX ද ඇතුළුව) grep, -P විකල්පය නොමැති බව සඳහන් කිරීම වටී.
TextGeek

මෑන් පිටුවෙන් This is highly experimental and grep -P may warn of unimplemented features.බොහෝ විට -Pඋරුම පද්ධතිවල භාවිතා කිරීම හොඳ අදහසක් නොවේ . මෙම printfතෝරා ගැනීම යහපත් වේ
Avindra Goolcharan

15

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

command | grep $'\t'

(එය ද්විත්ව උපුටා දැක්වීම් වලට දමන්න එපා!).


1
-E සඳහා අවශ්‍යතාවයක් නොමැත (සෙවූ දෙය රීජෙක්ස් නොවේ). විධානයකින් පයිප්ප දැමීමේ අවශ්‍යතාවයක් ද නොමැත. එයින් කියැවුණේ, නොසලකා හරින ලද මෙම අංගය ($ ට පෙර තනි-උපුටා ගත් නූල්) පෙන්වා දීම ගැන ස්තූතියි
වෝල්ටර් ට්‍රොස්

2
ඇත්ත වශයෙන්ම, මම යෝජනා කරන්නේ zenzotib පිළිතුර සරලව සංස්කරණය කරන ලෙසයි grep $'\t'.
Teemu Leisti

මෙය බාෂ්හි ලක්‍ෂණයක් බව අවධාරණය කළ යුතු අතර (
නිහ ly ව


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.