কাট কমান্ড সহ একটি সীমানা হিসাবে স্থান ব্যবহার করুন


328

cutকমান্ডটি দিয়ে আমি একটি সীমানা হিসাবে স্থানটি ব্যবহার করতে চাই ।

আমি এর জন্য কোন বাক্য গঠন ব্যবহার করতে পারি?


42
অসত্য, কাটা পাতার জন্য পৃষ্ঠাটি এটি ব্যাখ্যা করে না এবং সাধারণভাবে
তথ্যবহুল

2
এছাড়াও, "ইনফরমেশন কাট" এই ক্ষেত্রে কোনও উন্নতি নয়।
কার্ডিফ স্পেস ম্যান 0 'এ

3
@ এমকেলেটমেন্ট ০ যদি আমি স্মরণ করি তবে আমি এমন একটি মন্তব্যে জবাব দিচ্ছিলাম যেটি মুছে ফেলা হয়েছে, যা ম্যান পেজে এই প্রশ্নের উত্তর দেওয়া হিসাবে প্রত্যাখ্যান করে যা আমার মতে "অসত্য" ছিল, কারণ এটির পক্ষে কোনও ভাল কারণ থাকুক না কেন being বা না - এখন, আমি স্বীকার করছি যে তথ্যের অভাবের জন্য এখানে কোনও সঠিক কারণ থাকতে পারে, আমি এখনও মনে করি যে সাধারণ ব্যবহারের উদাহরণ ছাড়া ডকুমেন্টেশনগুলি কমপক্ষে বিরক্তিকর, যখন সম্পূর্ণ অপ্রয়োজনীয় নয়
আঙ্কেলজেইভ

3
@ ইউঙ্কলেজেভ পেয়েছেন; স্পষ্ট করার জন্য ধন্যবাদ; এই প্রশ্নের আগ্রহের ভিত্তিতে, ধরে নেওয়া ঠিক যে manপৃষ্ঠাটি যথেষ্ট নয় fair আসুন একবার দেখে নেওয়া যাক: " ট্যাব অক্ষরের পরিবর্তে ফিল্ড ডিলিমিটার চরিত্র হিসাবে -d delimব্যবহার করুন delim।" (বিএসডি cut, তবে জিএনইউ সংস্করণ এবং পসিক্স স্পেসে একই অবস্থা রয়েছে)। একটি ব্যবহার শেল ডাকা cut- টিপিক্যাল কেস - তাই কিভাবে করতে হবে সাধারণত একটি আর্গুমেন্ট মতো ব্যবহার করে স্থান পাস শেল সিনট্যাক্স , যা তর্কসাপেক্ষে নয় cutman পৃষ্ঠা কাজ। বাস্তব-বিশ্বের উদাহরণগুলি সর্বদা সহায়তা করে, এবং জিএনইউ ম্যান পৃষ্ঠাতে তাদের অভাব রয়েছে।
mklement0

4
যদিও নির্বাচিত উত্তরটি প্রযুক্তিগতভাবে সঠিক, তবে @ এমকেলেটমেন্ট 0 দ্বারা আরও সাম্প্রতিক ও বিস্তৃত উত্তরটিকে ক্যানোনিকাল উত্তর হিসাবে নির্বাচন করার বিষয়টি বিবেচনা করুন যাতে এটি শীর্ষে ফিল্টার করে।
ডেভিড লেবাউর

উত্তর:


367
cut -d ' ' -f 2

যেখানে 2 চান তা স্থান-বিস্মৃত ক্ষেত্রের ক্ষেত্রের নম্বর number


2
রেজিএক্সের মতো ডিলিমিটার হিসাবে নির্দিষ্ট চরিত্রের কোনও সংখ্যা ব্যবহার করতে আপনি কি কাট বলতে পারেন? যেমন কোনও স্পেসের সংখ্যা, যেমন \ s +
উভচর

3
@ ফোম্পাইল না, আমি বিশ্বাস করতে পারি না আপনি পারবেন না।
জোনাথন হার্টলি

6
আপনি এর সাথে রেজিক্সগুলি ব্যবহার করতে পারবেন না cut, তবে আপনি cutsযা দিয়ে সব cutসীমাবদ্ধতা "ঠিক" করতে চেষ্টা করতে পারেন : github.com/arielf/cuts
আরিফেল

আপনি কি প্রতি তৃতীয় স্থান-সীমাবদ্ধ ক্ষেত্র পেতে পারেন? cut -d ' ' -f 3,6,9,12,15,18প্রতিটি সংখ্যা নির্দিষ্ট না করেই পছন্দ করেন ?
মনোকিটো

169

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

এই ক্ষেত্রে একটি একক cutকমান্ডই যথেষ্ট নয় এবং আপনার এটি ব্যবহার করতে হবে:

tr -s ' ' | cut -d ' ' -f 2

অথবা

awk '{print $2}'

2
অজানা উদাহরণ ব্যবহারের জন্য ধন্যবাদ, আমার যা প্রয়োজন তা ঠিক।
স্পাজম

44

বিদ্যমান, সহায়ক উত্তরগুলির পরিপূরক করতে; আমাকে আলাদা উত্তর পোস্ট করতে উত্সাহিত করার জন্য কিউজেড সাপোর্টে টুপিটির টিপ :

দুটি স্বতন্ত্র প্রক্রিয়া এখানে কার্যকর হয়:

  • (ক) cut নিজেই পৃথক যুক্তি-d হওয়ার জন্য বিকল্পটিতে পাস করা সীমানা (স্থান, এই ক্ষেত্রে) প্রয়োজন কিনা তা সরাসরি যুক্ত করার পক্ষে এটি গ্রহণযোগ্য কিনা ।-d

  • (খ) কমান্ডটি চালিত হওয়ার আগে শেল কীভাবে সাধারণত আর্গুমেন্টগুলিকে পার্স করে।

(ক) ইউটিলিটিগুলির জন্য পসিক্স নির্দেশিকাগুলির একটি উদ্ধৃতি দ্বারা জবাব দেওয়া হয়েছে (জোর দেওয়া খনি)

যদি কোনও স্ট্যান্ডার্ড ইউটিলিটির SYNOPSIS কোনও বাধ্যতামূলক বিকল্প-যুক্তিযুক্ত একটি বিকল্প দেখায় [...] একটি অনুবর্তনকারী অ্যাপ্লিকেশন সেই বিকল্প এবং তার বিকল্প-যুক্তির জন্য পৃথক যুক্তি ব্যবহার করবেতবে , একটি মানানসই বাস্তবায়ন করিবে এছাড়াও অক্ষর হস্তক্ষেপ ছাড়া একই যুক্তি স্ট্রিং বিকল্প এবং বিকল্প-যুক্তি উল্লেখ করার অ্যাপ্লিকেশন অনুমতি

অন্য কথায়: এই ক্ষেত্রে, কারণ -dএর বিকল্প-যুক্তি বাধ্যতামূলক , আপনি যা করতে পারেন পছন্দ করে বিভেদক হিসাবে উল্লেখ করা হবে কিনা তা :

  • (গুলি) EITHER: একটি পৃথক যুক্তি
  • (ঘ) বা: একটি মান হিসাবে সরাসরি সংযুক্ত করার জন্য-d

একবার আপনি (গুলি) বা (ডি) চয়ন করার পরে এটি শেলের স্ট্রিং-আক্ষরিক পার্সিং - (খ) - যা গুরুত্বপূর্ণ:

  • পদ্ধতির (গুলি) সহ , নিম্নলিখিত সমস্ত ফর্মগুলি সমপরিমাণ:

    • -d ' '
    • -d " "
    • -d \<space> # <space> used to represent an actual space for technical reasons
  • পদ্ধতির (d) সাথে , নীচের সমস্ত ফর্মগুলি সমপরিমাণ:

    • -d' '
    • -d" "
    • "-d "
    • '-d '
    • d\<space>

সমতাটি শেলের স্ট্রিং-আক্ষরিক প্রক্রিয়াকরণ দ্বারা ব্যাখ্যা করা হয় :

উপরে উল্লিখিতcut সমস্ত সমাধানগুলি সময় মতো একই স্ট্রিংয়ের (প্রতিটি গ্রুপে) ফলাফল দেয় :

  • (গুলি) : cutদেখেন -dতার হিসেবে নিজের যুক্তি, একটি দ্বারা অনুসরণ পৃথক যুক্তি হল যে একটি স্থান গৃহস্থালির কাজ রয়েছে - কোট বা ছাড়া \উপসর্গ !.

  • (ঘ) : cutদেখেন -d প্লাস একটি স্থান গৃহস্থালির কাজ - কোট বা ছাড়া \উপসর্গ! - একই তর্ক অংশ হিসাবে ।

সম্পর্কিত গোষ্ঠীতে ফর্মগুলি চূড়ান্তভাবে একরকম হওয়ার কারণ শেল কীভাবে স্ট্রিং লিটারেলকে পার্স করে তার উপর ভিত্তি করে :

  • শেল নিদিষ্ট করা আক্ষরিক পারবেন হিসাবে মাধ্যমে একটি প্রক্রিয়া নামক উদ্ধৃত , যা গ্রহণ করতে পারেন বিভিন্ন ফরম :
    • একক-উদ্ধৃত স্ট্রিং: ভিতরে থাকা সামগ্রীগুলি আক্ষরিক অর্থে'...' নেওয়া হয় এবং একক গঠন করে যুক্তি গঠন করে
    • ডাবল-কোটেড স্ট্রিং: অভ্যন্তরের সামগ্রীগুলিও "..."একটি একক আর্গুমেন্ট গঠন করে, তবে এটি দ্রবণের সাপেক্ষে (পরিবর্তনশীল রেফারেন্সগুলি যেমন $varকমান্ড প্রতিস্থাপন ( $(...)বা `...`), বা গাণিতিক বিস্তৃতি ( $(( ... ))) প্রসারিত করে ।
    • \স্বতন্ত্র চরিত্রগুলির উদ্ধৃতি : একটি \একক চরিত্রের পূর্ববর্তী কারণে সেই চরিত্রটিকে আক্ষরিক হিসাবে ব্যাখ্যা করা যায়।
  • বরাত দিয়ে দ্বারা complemented হয় উদ্ধৃতি অপসারণ , যার মানে যে একবার শেল কমান্ড লাইন পার্স করেছে, এটা সরিয়ে ফেলা হবে আর্গুমেন্ট থেকে উদ্ধৃতি অক্ষর (পরিক্ষেপ '...'বা "..."বা \দৃষ্টান্ত) - এভাবে কমান্ড হচ্ছে না উদ্ধৃতি অক্ষর সূচিত প্রার্থনা

36

আপনি আরও বলতে পারেন:

cut -d\  -f 2

দ্রষ্টব্য যে ব্যাকস্ল্যাশ পরে দুটি স্পেস আছে।


30
যে ব্যক্তি জানেন যে '\' পরের চরিত্রটি থেকে রক্ষা পেয়েছে তা পরবর্তী কী হয়েছে তা লক্ষ করার জন্য খুব যত্নশীল হন। এর মতো স্থানের অক্ষরগুলি থেকে বাঁচতে '\' ব্যবহার করা খুব সাধারণ প্রবাদ i
জোনাথন হার্টলি

3
@ জোনাথন হার্টলি সাধারণত বেশিরভাগ
কোডই অপঠনযোগ্য

1
একটি লিনাক্স / ইউনিক্স দৃষ্টিকোণ থেকে, \ আমার প্রথম প্রচেষ্টা ছিল এবং এটি কার্যকর হয়েছিল। আমি সম্মত হই যে তুলনার তুলনায় এটি কম সুস্পষ্ট ' ', তবে আমি নিশ্চিত যে অনেকে এখানে আচরণের আশ্বাস হিসাবে এটি পড়তে পেরে আনন্দিত। আরও ভাল বোঝার জন্য দয়া করে নীচে @ এমকেলেটমেন্টের মন্তব্য দেখুন।
tresf

@ জোনাথন হার্টলি সংশোধন: " স্বার্থপর ব্যক্তি যে জানেন যে '\' পরবর্তী চরিত্র থেকে পালিয়ে যায় এবং ধরে নেয় সবাইকেও তা জানে"। ব্যক্তিগত প্রকল্পগুলির জন্য এটি প্রযোজ্য নয়, তবে একটি দল গঠনে এই অনুমানটি একটি অত্যন্ত বিপজ্জনক (এবং সম্ভাব্য ব্যয়বহুল) একটি।
এডুয়ার্ড নিকোদি

1
নিবন্ধন করুন আমরা কোডের পাঠকদের কথা বলছিলাম ("কে খেয়াল করে ...?"), লেখক নয়। তবে এছাড়াও, কিছু দলে দক্ষতার একটি নির্দিষ্ট স্তর ধরে নেওয়া ভাল। পরিবেশের উপর নির্ভর করে।
জোনাথন হার্টলি

5

আমি সবেমাত্র আবিষ্কার করেছি যে আপনি এটি ব্যবহার করতে পারেন "-d ":

cut "-d "

পরীক্ষা

$ cat a
hello how are you
I am fine
$ cut "-d " -f2 a
how
am

1
আসলে - বা '-d '
mklement0

3
লক্ষ্য করুন থেকে cutএর দৃষ্টিকোণ নিম্নলিখিত সব অভিন্ন: "-d ", '-d ', -d" ", -d' ', এবং -d\<space>: বিকল্প (থেকে সব ধরনের সরাসরি পরিশেষে যোগ বিকল্প যুক্তি (ক স্থান) -d) এবং ফলাফলের সঠিক একই স্ট্রিং সময় দ্বারা cutতাদের উদ্ধার: একটি একক শেলটি উদ্ধৃতি অপসারণের
mklement0

1
@ mklement0 এর উত্তর হওয়া উচিত উত্তর। এটি এই পৃষ্ঠায় সর্বাধিক বিস্তৃত (এটি একটি মন্তব্য হলেও)।
tresf

@ কিউজেড সাপোর্ট: আমি অনুভূতি এবং উত্সাহের প্রশংসা করি - এটি আমাকে অতিরিক্ত উত্তর ব্যাকগ্রাউন্ডের তথ্য সহ আমার নিজের উত্তর পোস্ট করতে অনুপ্রাণিত করেছে।
mklement0

1
লোল মুগ্ধকর আবিষ্কার!
হ্যারি

4

যদি ডেটাতে উদাহরণস্বরূপ একাধিক স্পেস থাকে তবে আপনি কাটা দিয়ে এটি সহজেই করতে পারবেন না। সহজ প্রক্রিয়াজাতকরণের জন্য ইনপুটটিকে স্বাভাবিক করতে আমি এটি দরকারী মনে করেছি। একটি কৌশলটি নীচের মতো স্বাভাবিককরণের জন্য সেড ব্যবহার করা।

echo -e "foor\t \t bar" | sed 's:\s\+:\t:g' | cut -f2  #bar

3

স্কুট , একটি কাটের মতো ইউটিলিটি (স্মার্ট তবে আমি তৈরি করেছি ধীর) যা ব্রেকিং টোকেন হিসাবে যে কোনও পার্ল রেজেক্স ব্যবহার করতে পারে। হোয়াইটস্পেসে ব্রেকিং হ'ল ডিফল্ট, তবে আপনি মাল্টি-চর রেজেক্সস, বিকল্প রেজেক্সেস ইত্যাদিও ভেঙে ফেলতে পারেন you

scut -f='6 2 8 7' < input.file  > output.file

সুতরাং উপরের কমান্ডটি হোয়াইটস্পেসে কলামগুলি ভেঙে এবং সেই ক্রমে (0-ভিত্তিক) কলগুলি 6 2 8 7 বের করতে পারে।


0

আমার একটি উত্তর আছে (আমি কিছুটা বিভ্রান্তিকর উত্তর স্বীকার করি) এতে sedনিয়মিত প্রকাশ এবং গোষ্ঠীগুলি অন্তর্ভুক্ত থাকে :

  • \S* - প্রথম শব্দ
  • \s* - ডিলিমিটার
  • (\S*) - দ্বিতীয় শব্দ - বন্দী
  • .* - লাইনের বাকি

একটি sedঅভিব্যক্তি হিসাবে , ক্যাপচার গ্রুপটি পালাতে হবে, \(এবং এবং\)

\1আয় ধরা গ্রুপ একটি কপি, IE দ্বিতীয় শব্দ।

$ echo "alpha beta gamma delta" | sed 's/\S*\s*\(\S*\).*/\1/'
beta

আপনি যখন এই উত্তরটি দেখুন, এটি কিছুটা বিভ্রান্তিকর, এবং, আপনি ভাবতে পারেন, কেন বিরক্ত করবেন? ঠিক আছে, আমি আশা করছি যে কেউ কেউ "আহা!" এবং এই প্যাটার্নটি একটি একক sedঅভিব্যক্তি দিয়ে কিছু জটিল পাঠ্য নিষ্কাশন সমস্যা সমাধান করতে ব্যবহার করবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.