দীর্ঘ সেড এক্সপ্রেশনকে একাধিক লাইনে কীভাবে ভাগ করবেন?


15
sed 's/[long1][long2]/[long3][long4]/' file.txt

আমি এই কমান্ডটি একাধিক লাইনে বিভক্ত করতে চাই - fx এর মতো কিছু:

sed 's/
    [long1]
    [long2]
  /
    [long3]
    [long4]
  /' file.txt

\স্ট্রিংগুলি ব্যবহার করে বা আলাদা করা কাজ করে না।



এজন্য পার্লের /xবিকল্পের পরিবর্তক রয়েছে ।
চোরোবা

1
@ নেট ওয়ার্কার: হ্যাঁ, ধন্যবাদ, আমি আমার উত্তরও সেখানে যুক্ত করেছি
রাফায়েল

উত্তর:


8

আপনি ব্যাশ ভেরিয়েবলগুলিতে দীর্ঘ স্ট্রিং সংরক্ষণ করতে পারেন, তারপরে sedকমান্ডটি ব্যবহার করুন :

string=[long1][long2]
replace= [long3][long4]
sed -e 's/'"$string"'/'"$replace"'/' file

আপনি যদি ব্যবহার করতে পারেন তবে আপনি পরিবর্তনকারী perlদিয়ে দীর্ঘ প্যাটার্নটি ভাঙ্গতে পারেন x:

perl -e 's/
[long1]
[long2]
/[long3][long4]/x' file

1
আপনি এত উক্তি কেন ব্যবহার করবেন? sed "s/$string/$replace/" file.txtভাল.
স্কট

1
এছাড়াও, অবশ্যই, আপনার পরে স্থানটি মুছতে হবে replace=
স্কট

8
sed 's'/\
'[long1]'\
'[long2]'\
'/'\
'[long3]'\
'[long4]'\
'/' file.txt

ব্যাকস্ল্যাশ সহ বেশ কয়েকটি লাইনে বিভক্ত হওয়া যদি নতুন লাইনগুলিকে ইন্টেন্ট করা না হয় তবে কাজ করে।

$ echo "a,b" | sed 's/\(.'\
> '\),\(.\)/\2-\1/'
b-a

জিএনইউ সেড ৪.২.২ এর সাথে সাইগউইনে পরীক্ষিত


আপনার সেড সংস্করণটি কী? আমি পরীক্ষা দিয়েছি GNU sed version 4.2.1এবং এটি কার্যকর হয় না।
cuonglm

2
দেখে মনে হচ্ছে প্রথম লাইনের শেষে একটি ব্যাকস্ল্যাশ অনুপস্থিত আছে, স্ল্যাশ পরে যাবে?
ভোলকার সিগেল

7

আরেকটি দিক:

[long]উপরের আইটেমগুলি কতটা রক্ষণাবেক্ষণযোগ্য ?

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

যেমন

সেড
-ই 'র / [ন্যূনতম-এস 1] / [ন্যূনতম-আর 1] /' \
-ই 'র / [ন্যূনতম-এস 2] / [ন্যূনতম-আর 2] /' \
-ই 'র / [ন্যূনতম-এস 3] / [ন্যূনতম-আর 3] /' \
-ই 's / [ন্যূনতম-এস 4] / [ন্যূনতম-আর 4] /' 

... চেষ্টা ও পছন্দ করার মতো কিছু হতে পারে।


4

আপনি এটি এইভাবে ব্রেক করতে পারেন:

sed '/[long1][long2]/
    s//[long3][long4]/'

বা হতে পারে:

sed "$(
    printf 's/[%s][%s]/[%s][%s]/' \
        long1 \
        long2 \
        long3 \
        long4
)"

বা একটি বংশগত সঙ্গে:

sed -f - <<SED file.txt
s/\
[long1]\
[long2]\
/\
[long3]\
[long4]\
/
SED
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.