কীভাবে লম্বা মিলের লাইনগুলি গ্রেপ বা এসকের মাধ্যমে ফিরে আসে tr


90

আমি বেশিরভাগ দীর্ঘ লাইনে থাকা HTML ফাইলগুলিতে এসিসি বা গ্রেপ চালাতে চাই। আমি খুব দীর্ঘ লাইনগুলি দেখতে চাই না যা বারবার মোড়ানো হয়। তবে আমি একটি দীর্ঘ লাইনের কেবলমাত্র সেই অংশটি দেখতে চাই যা একটি স্ট্রিং ঘিরে থাকে যা নিয়মিত প্রকাশের সাথে মেলে। ইউনিক্স সরঞ্জামগুলির যে কোনও সংমিশ্রণ ব্যবহার করে আমি এটি কীভাবে পেতে পারি?


4
কি ack? আপনি যখন কিছু পছন্দ করেন না তখন কি এটি ব্যবহার করা আদেশ? এরকম কিছু ack file_with_long_lines | grep pattern? :-)
অলোক সিংহল

6
@ অলোক ack( দেবিয়ান হিসাবে পরিচিত ack-grep) grepস্টেরয়েডগুলিতে রয়েছে। এছাড়া রয়েছে --thppptবিকল্প (নিশ্চয়ই মজা না)। bestthangrep.com
ZoogieZork

ধন্যবাদ আমি আজ কিছু শিখেছি।
অলোক সিংহল

4
যদিও --thppptবৈশিষ্ট্য কিছুটা বিতর্কিত, কী সুবিধা হতে হবে যে আপনি পার্ল ব্যবহার করতে পারেন মনে হচ্ছে, সরাসরি, কিছু পাগল regexes [[:space:]]এবং অক্ষর পছন্দ {, [ইত্যাদি সঙ্গে অর্থ পরিবর্তন -eএবং -Eএকটি উপায় যে মনে রাখা অসম্ভব মধ্যে পরিবর্তন করা হয়।
এভেজেনি সার্জিভ

উত্তর:


99

আশেপাশের কিছু প্রসঙ্গ দেখতে -oআপনার প্যাটার্নটি পরিবর্তনের সাথে আপনি সম্ভবত গ্রেপ বিকল্পটি ব্যবহার করতে পারেন ".{0,10}<original pattern>.{0,10}":

       -ও, - একা-মিল
              PATTERN এর সাথে মেলে এমন কোনও মিলের লাইনের অংশটি দেখান।

.. বা -c:

       -সি, - হিসাব
              সাধারণ আউটপুট দমন; পরিবর্তে মিলে যাওয়া লাইনের একটি গণনা মুদ্রণ করুন
              প্রতিটি ইনপুট ফাইলের জন্য। -V, - পরিবর্তন-ম্যাচ বিকল্পের সাথে (দেখুন
              নীচে), মেলানো নয় লাইনগুলি গণনা করুন।

44
একটি উদাহরণ করুন: grep -oE myfile "{0,20} mysearchstring {0,20}।।"
Renaud

14
@ রেনাউড (বর্ধিত প্যাটার্ন অপশন) হিসাবে দেখানো অনুসারে আপনার অ্যাড-ই বিকল্পের উত্তর পরিবর্তন করা উচিত, বা প্রসঙ্গটি না বাড়িয়ে কাজ করার প্রস্তাবিত প্যাটার্ন।

এটি প্রয়োজনীয় নয় তবে এখানে একটি উদাহরণ রয়েছে: $ echo "eeeeeeeeeeeeeeeeeeeeqqqqqqqqqqqqqqqqqqqqMYSTRINGwwwwwwwwwwwwwwwwwwwwrrrrrrrrrrrrrrrrrrrrr" > fileonelongline.txt && grep -oE ".{0,20}MYSTRING.{0,20}" ./fileonelongline.txt প্রিন্টসqqqqqqqqqqqqqqqqqqqqMYSTRINGwwwwwwwwwwwwwwwwwwww
উলিসেস লেয়েরা

এটি ভাল কাজ করে; তবে উল্লেখযোগ্য ক্ষয়ক্ষতি হ'ল ব্যবহার করার সময়, যেমন, oE ".{0,20}mysearchstring.{0,20}"আপনি প্রসঙ্গের বিরুদ্ধে অভ্যন্তরীণ "মূল" স্ট্রিংটির হাইলাইটিং হারাবেন কারণ পুরো জিনিসটি অনুসন্ধানের প্যাটার্নে পরিণত হয় becomes খুব সহজে ভিজ্যুয়াল স্ক্যানিং এবং ফলাফলের ব্যাখ্যার জন্য অনুসন্ধান ফলাফলগুলির আশেপাশে কিছু অ-হাইলাইট প্রসঙ্গ রাখার উপায় খুঁজে পেতে পছন্দ করবে।
অ্যারন ওয়ালেন্টাইন

4
ওহ, এখানে -oE ".{0,x}foo.{0,x}"দৃষ্টিভঙ্গিটি ব্যবহারের ফলে সংঘটিত হাইলাইটিং সমস্যার একটি সমাধান রয়েছে (যেখানে xপ্রসঙ্গে বর্ণের সংখ্যা রয়েছে) - সংযোজন `| গ্রেপ ফু `শেষ পর্যন্ত। এসি বা গ্রেপ সমাধানগুলির জন্য কাজ করে। আরও সমাধানগুলি এখানেও: unix.stackexchange.com/questions/163726/…
অ্যারন ওয়ালেন্টাইন

44

আপনার ফলাফল মাধ্যমে পাইপ cut। আমি একটি --cutস্যুইচ যুক্ত করার বিষয়টিও বিবেচনা করছি যাতে আপনি বলতে পারেন --cut=80এবং কেবল 80 টি কলাম পান।


8
তবে যে অংশটি মেলে তার প্রথম 80 টি অক্ষর না থাকলে কী হবে?
ইথার

4
এফডব্লিউআইডাব্লু আমি গ্রেপটিতে সংযুক্ত হয়েছি | cut=c1-120, আমার জন্য কাজ করেছি (যদিও মিলিত পাঠের প্রায় কাটা সম্পর্কে জানেন না)
জ্যাক রেসন

26
| cut=c1-120আমার পক্ষে কাজ করেনি, আমার করণীয় ছিল| cut -c1-120
কেন কোচরনে

4
আমি মনে করি @edib সিনট্যাক্স মধ্যে সঠিক | cut -c 1-100 stackoverflow.com/a/48954102/1815624
CrandellWS

4
@ অ্যান্ডিলেস্টার: --no-wrapযে বিকল্পগুলি ব্যবহার করে সে সম্পর্কে কী $COLUMNS?
নট 101

25

আপনি এসিপির জন্য পেজার হিসাবে কম ব্যবহার করতে পারেন এবং দীর্ঘ লাইনগুলি কাটাতে পারেন: ack --pager="less -S" এটি দীর্ঘ রেখাটি ধরে রাখে তবে এটি মোড়কের পরিবর্তে এক লাইনে রেখে দেয়। আরও লাইন দেখতে, তীর কীগুলির সাহায্যে বাম / ডান কম স্ক্রোল করুন।

এটির জন্য আমার কাছে নিম্নের উপন্যাসের সেটআপ রয়েছে:

alias ick='ack -i --pager="less -R -S"' 

4
দয়া করে মনে রাখবেন যে আপনি --pagerযদি সর্বদা এটি ব্যবহার করতে চান তবে আপনি নিজের কমান্ডটি আপনার ~ / .ackrc ফাইলটিতে রাখতে পারেন।
অ্যান্ডি লেস্টার

এটিকে এখন পর্যন্ত এই সমস্যার সর্বোত্তম সমাধান বলে মনে হচ্ছে যা আমাকে প্রচুর পরিমাণে উজ্জীবিত করে। আমি চাই কিভাবে আমি ব্যবহার করতে জানতাম ack
ব্রায়ান পিটারসন

@ ব্রায়ান পিটারসন ackঠিক অনেকটা grepসাধারণ, খুব সাধারণ ক্ষেত্রে কেবল সহজ
অ্যারন ওয়ালেন্টাইন


2

থেকে নেওয়া: http://www.topbug.net/blog/2016/08/18/truncate-long-matching-lines-of-grep-a-solution-that- preserves-color /

প্রস্তাবিত পদ্ধতির ".{0,10}<original pattern>.{0,10}"ক্ষেত্রে হাইলাইট করার রঙটি প্রায়শই গোলমেলে ব্যতীত পুরোপুরি ভাল। আমি অনুরূপ আউটপুট সহ একটি স্ক্রিপ্ট তৈরি করেছি তবে রঙটিও সংরক্ষণ করা হয়েছে:

#!/bin/bash

# Usage:
#   grepl PATTERN [FILE]

# how many characters around the searching keyword should be shown?
context_length=10

# What is the length of the control character for the color before and after the
# matching string?
# This is mostly determined by the environmental variable GREP_COLORS.
control_length_before=$(($(echo a | grep --color=always a | cut -d a -f '1' | wc -c)-1))
control_length_after=$(($(echo a | grep --color=always a | cut -d a -f '2' | wc -c)-1))

grep -E --color=always "$1" $2 |
grep --color=none -oE \
    ".{0,$(($control_length_before + $context_length))}$1.{0,$(($control_length_after + $context_length))}"

ধরে নেওয়া যাক স্ক্রিপ্ট হিসেবে সংরক্ষিত হয় grepl, তারপর grepl pattern file_with_long_linesকিন্তু ম্যাচিং লাইন প্রদর্শন করা উচিত ম্যাচিং স্ট্রিংয়ের মাত্র 10 অক্ষর।


কাজ করে, তবে আমার জন্য এই জাতীয় আবর্জনার আউটপুটগুলি: ^ [[? 62; 9; সি।) আমি ডিবাগ করার চেষ্টা করিনি কারণ @ জোনাঃ ব্রান এর উত্তর আমাকে সন্তুষ্ট করেছে।
sondra.kinsey 21

1

আমি যা করি তা এখানে:

function grep () {
  tput rmam;
  command grep "$@";
  tput smam;
}

আমার .বাশ_ প্রোফাইলে আমি গ্রেপকে ওভাররাইড করি যাতে এটি স্বয়ংক্রিয়ভাবে tput rmamআগে এবং tput smamপরে চলে, যা মোড়কে অক্ষম করে এবং তারপরে এটি পুনরায় সক্ষম করে।


এটি একটি দুর্দান্ত বিকল্প - আসল ম্যাচটি যদি পর্দার বাইরে থাকে তবে ...
জেরাস

1

এখানে চিত্র বর্ণনা লিখুন

আপনি যে অস্বাভাবিক পরিস্থিতিতে ব্যবহার করতে পারবেন না সেখানে আপনি ব্যবহার -Eকরতে পারেন:

grep -oe ".\{0,10\}error.\{0,10\}" mylogfile.txt

0

আমি নিম্নলিখিত আমার মধ্যে রাখুন .bashrc:

grepl() {
    $(which grep) --color=always $@ | less -RS
}

তারপরে আপনি greplযে কোনও আর্গুমেন্টের জন্য উপলব্ধ কমান্ড লাইনে ব্যবহার করতে পারেন grep। দীর্ঘ রেখার লেজ দেখতে তীর কীগুলি ব্যবহার করুন। qছাড়তে ব্যবহার করুন ।

ব্যাখ্যা:

  • grepl() {: একটি নতুন ফাংশন সংজ্ঞায়িত করুন যা প্রতিটি (নতুন) বাশ কনসোলে উপলভ্য হবে।
  • $(which grep): এর পুরো পথ পান grep। (উবুন্টু একটি উপনাম এর grepসমতুল্য হিসাবে সংজ্ঞায়িত করে grep --color=autoWe আমরা এটির নামটি চাই না তবে মূলটি চাই grep।)
  • --color=always: আউটপুট রঙিন। ( --color=autoউপনামটি থেকে কাজ করবে না যেহেতু grepআউটপুটটি পাইপে স্থাপন করা হয়েছে এবং এটি রঙিন করবে না তা সনাক্ত করে))
  • $@: ফাংশনটিতে দেওয়া সমস্ত যুক্তি greplএখানে রাখুন ।
  • less: লাইন ব্যবহার করে প্রদর্শন করুন less
  • -R: রঙ দেখান
  • S: লম্বা লাইন ভাঙবেন না
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.