লাইন সংখ্যা ছাড়াই বাশ ইতিহাস


129

বাশ historyকমান্ডটি খুব দুর্দান্ত। আমি বুঝতে পেরেছি কেন এটি লাইন নম্বরগুলি দেখায়, তবে কি এমন কোনও উপায় আছে যা আমি ইতিহাস কমান্ডটি উপস্থাপন করতে এবং লাইন নম্বরগুলিকে দমন করতে পারি?

এখানে পয়েন্ট হিস্ট্রি কমান্ডটি ব্যবহার করা হয়, সুতরাং দয়া করে উত্তর দিন না cat ~/.bash_history

বর্তমান আউটপুট:

  529 man history
  530 ls
  531 ll
  532 clear
  533 cd ~
  534 history

Graphতিহাসিক গ্রাফিক উত্স।

পছন্দসই আউটপুট:

man history
ls
ll
clear
cd ~
history

Graphতিহাসিক গ্রাফিক উত্স।

আপনার দুর্দান্ত সমাধানের জন্য প্রত্যেককে ধন্যবাদ। পলস সবচেয়ে সহজ এবং আমার পক্ষে কাজ করবে কারণ আমার বাশ ইতিহাসের আকারটি 2000 এ সেট করা হয়েছে।

আমি আজ সকালে পাওয়া একটি দুর্দান্ত নিবন্ধটিও ভাগ করতে চেয়েছিলাম। এটিতে বেশ কয়েকটি ভাল বিকল্প রয়েছে যা আমি এখন ব্যবহার করছি, যেমন ব্যাশ ইতিহাসের থেকে সদৃশ এন্ট্রিগুলি রাখা এবং একাধিক ব্যাশ সেশনগুলি ইতিহাসের ফাইলটি ওভাররাইট না করে তা নিশ্চিত করে: http://blog.macroates.com/2008/working-with -history-ইন-ব্যাশ /


আমি জিজ্ঞাসা করতে পারি কেন cat ~/.bash_historyবরখাস্ত করা হয়?
ফ্লো

উত্তর:


204

এটা চেষ্টা কর:

$ history | cut -c 8-

আমরা historyফাইলটি পড়ার পরিবর্তে কমান্ড থেকে আউটপুট পাইপ করতে পারি ?
সিডব্লিউড

মনে হচ্ছে কাজ! আপনি কি ব্যাখ্যা করতে পারেন এটি কি করছে? সংখ্যাগুলি 1 - 10,000 হলে এটি কাজ করবে?
সিডব্লিউড

29
man cut। এটি historyকমান্ডের প্রতিটি লাইন আউটপুট প্রথম 7 অক্ষর মুছে ফেলছে । এটির ক্ষেত্রে কেবল সমস্যা থাকতে হবে যদি সংখ্যাটি 99,999 এর বেশি হয়, যা আমি কখনও দেখিনি (এবং আমি শেলগুলি প্রচুর ব্যবহার করি )। তবে আপনি যদি এটি নিয়ে উদ্বিগ্ন হন:history | sed 's/^ *[0-9]* *//'
কিথ থমসন

1
আমি মনে করি @ পল আর এর সমাধানটি আমার যা প্রয়োজন। আমি প্রথমে বুঝতে পারি নি যে ইতিহাস কমান্ড শূন্যস্থানগুলির সাথে রেখা সংখ্যাগুলি cutপ্যাড করছে এবং এখন সিনট্যাক্সটি আরও অর্থবোধ করে :) আপনার কী সমাধান> 100 কে ইতিহাসের জন্য কাজ করবে তার জন্য @ কিথ থম্পসনকে ধন্যবাদ!
সিডব্লিউড

5
@ সিডব্লিউডি: আপনার ইতিহাসে যদি 100,000 কমান্ড থাকে তবে এখন সময় এসেছে কীবোর্ড থেকে দূরে সরে গিয়ে ঘরে। আপনি যদি ইতিমধ্যে বাড়িতে থাকেন তবে বাইরে যান। 8-)} (হ্যাঁ, আমি জানি ইতিহাস অধিবেশন ধরে রাখা যেতে পারে।)
কিথ থম্পসন

22

awk সাহায্য করতে পারি:

history|awk '{$1="";print substr($0,2)}'

আপনার দীর্ঘ ইতিহাস থাকলে এই উত্তরটি ব্যর্থ হতে পারে।


হা হা, ধন্যবাদ - substrএত সহজ, আমি history | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'আমার জন্য ব্যবহার করা হয় !!
geedoubleya

17

আমি যথেষ্ট সচেতন যে এই প্রশ্ন বাশের জন্য এবং অনেক লোক zsh এ স্যুইচ না করা পছন্দ করে (কিউ ডাউনভোটস ...)

তবে, আপনি যদি zsh এ স্যুইচ করতে ইচ্ছুক হন তবে zsh এটিকে স্থানীয়ভাবে সমর্থন করে (পাশাপাশি ইতিহাসের বিন্যাসের অন্যান্য বিকল্প হিসাবে)

zsh> fc -ln 0

( Https://serverfault.com/questions/114988/removing-history-or-line-numbers-from-zsh-history-file দেখুন )


7
আসলে fcএকটি bashবিল্টিন পাশাপাশি। পার্থক্যটি হ'ল প্রথম লাইনটি 1তাই এটি হবেfc -ln 1
উইসবাকি

//, এই সত্যটির জন্য একটি উত্সাহ দিন যে আমি এমনকি জানতাম না যে বাশের বিকল্পগুলি খুব দীর্ঘ সময় পর্যন্ত ছিল যতক্ষণ না কেউ তাদের মতো প্রসঙ্গে এনে দেয়।
নাথান বাসানিজ

11

আমি এটির জন্য দেরী করছি, তবে আপনার ~/.bashrcবা ~/.profileফাইলটিতে সংক্ষিপ্ত পদ্ধতিটি নিম্নলিখিতটি যুক্ত করা হবে:

HISTTIMEFORMAT="$(echo -e '\r\e[K')"

বাশ থেকে manpage:

       HISTTIMEFORMAT
              যদি এই ভেরিয়েবলটি সেট করা থাকে এবং শূন্য না হয় তবে এর মান হিসাবে ব্যবহৃত হয়
              স্ট্রিম টাইম স্ট্যাম্প প্রিন্ট করতে স্ট্রফটাইম (3) এর জন্য ফর্ম্যাট স্ট্রিং
              ইতিহাস অন্তর্নির্মিত দ্বারা প্রদর্শিত প্রতিটি ইতিহাস এন্ট্রি সহ। যদি
              এই পরিবর্তনশীল সেট করা আছে, সময় স্ট্যাম্প ইতিহাসে লেখা হয়
              ফাইল যাতে তারা শেল সেশন জুড়ে সংরক্ষণ করা যেতে পারে। এটি ব্যবহার করে
              টাইমস্ট্যাম্পগুলি থেকে আলাদা করতে ইতিহাসের মন্তব্য চরিত্র
              অন্যান্য ইতিহাস লাইন।

এই ক্ষমতাটি ব্যবহার করে, একটি স্মার্ট হ্যাক পরিবর্তনশীল "মুদ্রণ" কে ক্যারেজ রিটার্ন ( \r) তৈরি করে এবং Kপ্রকৃত টাইমস্ট্যাম্পের পরিবর্তে লাইনটি (এএনএসআই কোড ) সাফ করে ।


কিছুটা সহজ, আরও অস্পষ্ট সিনট্যাক্স ব্যবহার করে:HISTTIMEFORMAT=$'\r\e[K'
ওয়াজান্দ্রিয়া

5
এবং একটি লাইন বিকল্প:HISTTIMEFORMAT=$'\r\e[K' history
উইজান্ড্রিয়া

5

বিকল্পভাবে, আপনি সেড ব্যবহার করতে পারেন:

history | sed 's/^[ ]*[0-9]\+[ ]*//'

উপনাম ব্যবহার করে, আপনি এটি আপনার মান হিসাবে সেট করতে পারেন (এটি আপনার বাশ_প্রফাইলে আটকে দিন):

alias history="history | sed 's/^[ ]*[0-9]\+[ ]*//'"

1
\+একটি বেসিক নিয়মিত প্রকাশে পসিক্স অনুগত হয় না। \{1,\}আপনার sedঅ-মানক \+এক্সটেনশানটিকে সমর্থন না করে থাকলে ব্যবহার করুন ।
রিচার্ড হ্যানসেন

4

যদিও -cবিকল্পটির সাথে কাটাটি বেশিরভাগ ব্যবহারিক উদ্দেশ্যে কাজ করে, তবে আমি মনে করি যে ইতিহাসকে বিশৃঙ্খল করার জন্য এটি আরও ভাল সমাধান হবে। উদাহরণ স্বরূপ:

history | awk '{ $1=""; print }'

অথবা

history | awk '{ $1=""; print $0 }'

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

print $0এর সমতুল্য print, যেহেতু ডিফল্টটি লাইনে উপস্থিত সমস্ত কিছু মুদ্রণ করে। টাইপিং print $0আরও সুস্পষ্ট, তবে কোনটি আপনি চয়ন করেন তা আপনার উপর নির্ভর করে। আচরণকে print $0কেবল printযখন awk সঙ্গে ব্যবহার আরো স্পষ্ট করে আপনি একটি ফাইল প্রিন্ট করতে awk ব্যবহার করে তা হল ( catawk পরিবর্তে টাইপ করতে দ্রুত হতে পারে, কিন্তু এই একটি বিন্দু ব্যাখ্যা জন্য)।

[প্রাক্তন] file 0 দিয়ে কোনও ফাইলের বিষয়বস্তু প্রদর্শনের জন্য awk ব্যবহার করা

$ awk '{print $0}' /tmp/hello-world.txt
Hello World!

[প্রাক্তন] সুস্পষ্ট without 0 ছাড়াই কোনও ফাইলের বিষয়বস্তু প্রদর্শনের জন্য অ্যাজকে ব্যবহার করা

$ awk '{print}' /tmp/hello-world.txt
Hello World!

[প্রাক্তন] ইতিহাস রেখাটি একাধিক রেখাকে বিস্তৃত করার সময় বিশ্রী ব্যবহার করে

$ history
   11  clear
   12  echo "In word processing and desktop publishing, a hard return or paragraph break indicates a new paragraph, to be distinguished from the soft return at the end of a line internal to a paragraph. This distinction allows word wrap to automatically re-flow text as it is edited, without losing paragraph breaks. The software may apply vertical whitespace or indenting at paragraph breaks, depending on the selected style."

$ history | awk ' $1=""; {print}'
 clear
 echo "In word processing and desktop publishing, a hard return or paragraph break indicates a new paragraph, to be distinguished from the soft return at the end of a line internal to a paragraph. This distinction allows word wrap to automatically re-flow text as it is edited, without losing paragraph breaks. The software may apply vertical whitespace or indenting at paragraph breaks, depending on the selected style."

4
history -w /dev/stdout

এর আউটপুট থেকে history --help:

-আমরা বর্তমান ইতিহাস ইতিহাসের ফাইলে লিখি

এটি নির্দিষ্ট ফাইলে বর্তমান ইতিহাস লেখায় - /dev/stdoutএই ক্ষেত্রে।


3

historyকমান্ডের সাথে লাইন সংখ্যা দমন করার বিকল্প নেই। সবাই যেমন পরামর্শ দিচ্ছে আপনাকে একাধিক কমান্ড একত্রিত করতে হবে:

উদাহরণ:

history | cut -d' ' -f4- | sed 's/^ \(.*$\)/\1/g'

3
যদি আপনি sedযাইহোক এটি চালাচ্ছেন , তবে প্রাথমিক কাটটি অতিরিক্ত কাজ নয় - পরিবর্তে এটি প্রকাশের সাথে যুক্ত করুন।
moopet

2
$ hh -n

আপনি https://github.com/dvorka/hstr চেষ্টা করতে পারেন যা বাশ ইতিহাসকে "alচ্ছিক" মেট্রিক ভিত্তিক ক্রম সহ ফিল্টারিংয়ের জন্য অনুমতি দেয় যা এটি এগিয়ে এবং পিছনের দিক উভয়ই অনেক বেশি দক্ষ এবং দ্রুত:

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

এটি সহজেই আবদ্ধ হতে পারে Ctrl-rএবং / অথবাCtrl-s


1

cutএটি সমাধানের জন্য আপনি আদেশটি ব্যবহার করতে পারেন :

STDIN বা ফাইলগুলি থেকে ক্ষেত্রগুলি কেটে দিন।

  • STDIN এর প্রতিটি লাইনের প্রথম ষোলটি অক্ষর কেটে ফেলুন: cut -c 1-16

  • প্রদত্ত ফাইলগুলির প্রতিটি লাইনের প্রথম ষোলটি অক্ষর কেটে ফেলুন: cut -c 1-16 file

  • তৃতীয় অক্ষর থেকে প্রতিটি লাইনের শেষ পর্যন্ত সমস্ত কিছু কেটে ফেলুন: cut -c3-

  • ফিল্ড ডিলিমিটার হিসাবে কোলন ব্যবহার করে প্রতিটি লাইনের পঞ্চম ক্ষেত্রটি কেটে ফেলুন (ডিফল্ট ডিলিমিটারটি ট্যাব হয়): cut -d':' -f5

  • ডিলিমিটার হিসাবে একটি সেমিকোলন ব্যবহার করে প্রতিটি লাইনের দ্বিতীয় এবং দশম ক্ষেত্রটি কেটে নিন: cut -d';' -f2,10

  • সীমানা হিসাবে স্থান ব্যবহার করে প্রতিটি লাইনের 3 থেকে 7 টি ক্ষেত্রগুলি কেটে দিন: cut -d' ' -f3-7


0

আমি জানি আমি পার্টির জন্য দেরি করে ফেলেছি তবে এটি মনে রাখা খুব সহজ:

cat ~/.bash_history

সত্য, তবে ওপি-র দ্বিতীয় লাইন: "এখানে বক্তব্যটি হিস্ট্রি কমান্ডটি ব্যবহার করা হচ্ছে, সুতরাং দয়া করে বিড়ালটিকে উত্তর দিন না b / .Bash_history"
Cireo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.