সেড ব্যবহার করে স্ট্রিংয়ের প্রথম অংশটি সরান


14

আমি এটি থেকে কীভাবে পেতে পারি:

randomcollege-nt\user90

এটি:

user90

ব্যবহার করছেন sed?


2
একটি সহায়ক টিপ: যখন কোনও কমান্ড কী করে তা আপনি নিশ্চিত নন, টাইপ করুন এবং man the_command_nameকমান্ডের জন্য একটি সহায়ক নির্দেশিকা ম্যানুয়াল পাবেন। আপনি www.google.com এ গিয়ে "কমান্ড_নাম টিউটোরিয়াল" টাইপ করতে পারেন এবং আপনি প্রচুর ধাপে পাশের গাইড পাবেন।
DBedrenko

2
উপর টিউটোরিয়ালের জন্য sedএখানে যান: grymoire.com/Unix/Sed.html
পান্ড্য

উত্তর:


15

আমি grepসন্ধান করতে একটি সাধারণ ব্যবহার করব user90:

$ echo "randomcollege-nt\user90" | grep -o user90
user90

যদি ব্যবহারকারী 90 ধ্রুব না হয় তবে এই আদেশটি পছন্দ করুন:

$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90

পরিশেষে sedফাইলটি সম্পাদনা করতে ব্যবহার করে:

$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file

বা সম্ভাব্য সমস্ত ব্যবহারকারীর অ্যাকাউন্টের সাথে মেলে:

$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file

মজার বিষয় আমি চেষ্টা করেছিলাম এবং এটি কিছুই ফেরেনি। আমি 12.04 ব্যবহার করছি যদি এটি গুরুত্বপূর্ণ হয়। আমি grep -Fকেবল পুরো স্ট্রিং থাকলে এটি প্রদর্শিত হবে ।
রোবম্যান 1723

@ রোবম্যান 1723 12.04 এ পরীক্ষা করা হয়েছে, আমার প্রথম কমান্ডগুলি কাজ করে। নিশ্চিত হয়ে নিন যে আপনার কোথাও কোনও গ্রেপ ওরফে সংজ্ঞায়িত নেই। বিটিডাব্লু যেমন মনে হয় আপনি সেডের সাথে ইনলাইন প্রতিস্থাপনের সন্ধান করছেন আমি এ জাতীয় কমান্ড যুক্ত করেছি।
সিলভাইন পাইনাউ

এমন কোনও উপায় আছে যা আপনি সেড কমান্ডটি সমস্ত "এলোমেলো ক্লেজ-এনটি \" কে কেটে ফেলতে পারবেন কিন্তু কেবল ব্যবহারকারী 90 এর চেয়ে বেশি প্রদর্শন করবেন? উদাহরণ: র্যান্ডমকলেজ-এনটি \ ইউজার 90 র্যান্ডমকলেজ-এনটি \ ইউজার 91 র্যান্ডমকলেজ-এনটি \ ইউজার 92 আউটপুট: ইউজার 90 ইউজার 91 ইউজার 92
রোবম্যান 1723

1
@ Roboman1723 আপনার নিজের মূল ফাইল এবং আপনার পছন্দসই আউটপুটটি আপনার প্রশ্নের সাথে সংযুক্ত করা উচিত যাতে আপনাকে সাহায্য করতে ইচ্ছুক প্রত্যেকে এটি দেখতে পারে।
সিলভাইন পাইনাউ

1
@ সিলওয়াইনপাইনাউ আমি মনে করি প্রথম কমান্ডটি উপযুক্ত নয়।
অবিনাশ রাজ

20

আপনি domain\usernameউইন্ডো থেকে সম্ভবত স্ট্রিং থেকে ব্যবহারকারীর নামটি বের করতে কিছু পাঠ্য পার্স করছেন । উপরের উত্তরগুলির বেশিরভাগটি কেবল আপনার নির্দিষ্ট উদাহরণের স্ট্রিংকে সম্বোধন করছে।

এটি করার সর্বোত্তম উপায় হ'ল সিডে রেজেেক্স ব্যবহার করে যা কিছু পরে আসবে তা বের করতে \। আপনি এটি কীভাবে করবেন তা এখানে:

sed 's|.*\\\(.*\)|\1|'

এটি .*ব্যাকস্ল্যাশ না হওয়া অবধি সমস্ত কিছু ( ) এখানে মিলবে (এখানে, আমরা এটি থেকে পালিয়ে যাচ্ছি, সুতরাং এটি \\), তারপরে ব্যাকস্ল্যাশ ( .*) এর পরে সমস্ত কিছু মেলে তবে এটি একটি ক্যাপচার গ্রুপ তৈরি করে (অর্থাত্ এটি চারপাশে বন্ধনী আবরণ করুন, তবে আমাদের পালাতে হবে) তাদের, তাই \(.*\))। এখন আমাদের \ক্যাপচার গ্রুপ হিসাবে স্ট্রিংয়ের পরে যা কিছু আসে তাই আমরা এর সাথে উল্লেখ করে মুদ্রণ করি \1

আপনি উপরের sedকমান্ডটি কোনও ডোমেন নাম দিয়ে ব্যবহার করতে পারেন , অগত্যা নয় randomcollege-nt

$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90

$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username

$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723

10

আরেকটি sed:

$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90

বা পজিকলি:

$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90

1
এটি কোনও বাশিজম নয়, এটি পসিক্স shবৈশিষ্ট্য। pubs.opengroup.org/onlinepubs/009604599/utilities/…
nyuszika7h

+1 টি। আপনার উত্তরটি দেখতে পেল না, আমি
ওপির

9

আমি জানি আপনি সেড ব্যবহার করতে চান তবে আমি অন্যরকম কিছু ব্যবহার করব ...

echo "randomcollege-nt\user90" | cut -d'\' -f2

1
জানা কিভাবে একটি টুল ব্যবহার করার জন্য ঠিক যেমন বুদ্ধিমান হিসাবে গুরুত্বপূর্ণ যা ব্যবহারের হাতিয়ার।
রাফা সিলেক

5

এটাই কি প্রশ্ন?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90

যদি স্টিং র্যান্ডমকলেজ-এনটি কনটেন্ট না হয় তবে উপরের / নীচে অ্যাড্ক কমান্ড ব্যবহার করুন।


1
যখন আমি চালাই যে আমি পাই /user90নাuser90
Roboman1723

2
না ঠিক আছে, আমি ইউজার 90 পেয়েছি।
সপ্তর্ষি নাগ

3

বরং আপনি "ইউজার 90" ফিল্টার করতে 'অজক' ব্যবহার করুন:

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}

এগুলি কি জায়গায় জায়গায় ফাইলটি সম্পাদনা করার জন্য এবং এটিকে কোনও নতুন ফাইলে আউটপুট দেওয়ার দরকার নেই?
রোবম্যান 1723

@ Roboman1723 দেখতে stackoverflow.com/a/16531920/2072269
muru

হ্যাঁ আপনাকে অবাক করার জন্য -f বিকল্পটি ব্যবহার করতে হবে details বিশদগুলির জন্য ম্যান পৃষ্ঠাটি দেখুন।
সপ্তর্ষি নাগ


1


সঙ্গে sed একটি নির্দিষ্ট অক্ষর সামনে একটি স্ট্রিং ডিলিট সবকিছু (ডবল বন্ধনী [নির্দিষ্ট গৃহস্থালির কাজ] এতে সংজ্ঞায়িত)।

echo "randomcollege-nt\user90" | sed 's/.*[\]//'

মানে সব প্রতিস্থাপন (.*[\] আগে ) অক্ষরকে \সাদা স্থানের অক্ষর ( //) দিয়ে

আপনার যদি কোনও ফাইল থাকে এবং কমান্ড ব্যবহার করে -iফ্ল্যাগটি প্রতিস্থাপন করতে sedচান তবে:

sed -i 's/.*[\]//' /path/to/FileName

1

মূল প্রশ্নটির জন্য জিজ্ঞাসা করা হয়েছিল sed, তবে আমি দেখতে পাচ্ছি যে বিকল্পগুলি এখানে জনপ্রিয়।

আপনি যদি ব্যাশ ব্যবহার করছেন তবে প্যারামিটারের বিস্তারটি সবচেয়ে সহজ:

ORIGIN='randomcollege-nt\user90'
echo "${ORIGIN#*\\}"

আপনি যদি সম্ভাব্যভাবে একাধিক ব্যাকস্ল্যাশ আশা করে থাকেন তবে হ্যাশ লক্ষণগুলি দ্বিগুণ করুন:

echo "${ORIGIN##*\\}"

আরও তথ্যের জন্য, man bashএবং অনুসন্ধান করুন Parameter Expansion


0

যদি কেউ # server_tokens off;অটো ডি-অপ্সের সাহায্যে স্বয়ংক্রিয়ভাবে nginx থেকে একটি মন্তব্য সরানোর চেষ্টা করছে :

sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf

উবুন্টু ১.0.০৪ এলটিএস-এ এনজিএনএক্স / 1.12.1 এর জন্য পরীক্ষিত এবং কাজ করছে। এখানে সার্ভার টোকেন বন্ধ করে এনজিআইএনএক্স লক ডাউন সম্পর্কিত সম্পর্কিত উত্তর ।

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