সমস্ত জায়গার আগে আমি কীভাবে একটি ব্যাকস্ল্যাশ যুক্ত করতে পারি?


8

আমি কীভাবে প্রতিটি স্থানের আগে একটি ব্যাকস্ল্যাশ রাখতে পারি, বিশেষত ব্যবহার trবা sedকমান্ড ব্যবহার করে?

আমার লিপিটি এখানে:

#!/bin/bash
line="hello bye"
echo $line | tr ' ' "\\\ "

এটি স্থান ব্যাকস্ল্যাশ এবং স্পেসের পরে স্থানগুলি স্থান করে নেবে বলে মনে করা হচ্ছে, তবে এটি কেবল স্থানগুলি একটি ব্যাকস্ল্যাশ এবং ব্যাকল্যাশ + স্পেসের সাথে প্রতিস্থাপন করবে।

এটি আমি প্রাপ্ত আউটপুট:

hello\bye

প্রত্যাশিত আউটপুট:

hello\ bye

আপনি কি দয়া করে কিছুটা ব্যাখ্যা করতে পারেন? আপনি কি এমন কোনও স্ক্রিপ্ট খুঁজছেন যা কোনও পাঠ্য ফাইল পরিবর্তন করে? ঠিক কি আপনি খুঁজছেন?
ফাব্বী

tr x ' ', xআপনি যে চরিত্রটি প্রতিস্থাপন করতে চান তা কোথায়?
ডোরকনব

আপডেট - যুক্ত উদাহরণ।
ডাকা

উত্তর:


17

trএকাধিক অক্ষর করতে পারে না। পরিবর্তে এর মধ্যে একটি ব্যবহার করুন:

  1. sed

    echo "$line" | sed 's/ /\\ /g' 
    

    অথবা

    sed 's/ /\\ /g' <<< "$line"
    
  2. পার্ল

    echo "$line" | perl -pe 's/ /\\ /g'  
    

    অথবা

    perl -pe 's/ /\\ /g'<<< "$line"
    

    পারেলের একটি নিফটি ফাংশনও রয়েছে quotemetaযা স্ট্রিংয়ের মধ্যে সমস্ত বিজোড় জিনিসগুলি এড়াতে পারে:

    line='@!#$%^&*() _+"'
    perl -ne 'print quotemeta($_)' <<< $line
    

    উপরেরটি মুদ্রণ করবে

    \@\!\#\$\%\^\&\*\(\)\ _\+\"\
    
  3. আপনি ব্যবহার করতে পারেন printfএবং %q:

    %q  quote the argument in a way that can be reused as shell input
    

    সুতরাং, আপনি করতে পারে

    echo "$line" | printf "%q\n" 
    

    মনে রাখবেন যে পার্লের মতো এটি কেবল ফাঁকা জায়গা নয় সমস্ত বিশেষ অক্ষর থেকে quotemetaরক্ষা পাবে ।

    printf "%q\n" <<<$line
    
  4. আপনার যদি কোনও ভেরিয়েবলের লাইন থাকে তবে আপনি সরাসরি ব্যাশে এটি করতে পারেন:

    echo ${line// /\\ }
    

হ্যাঁ এটি কাজ করে, তবে ব্যাকল্যাশ + স্পেসের সাথে "ক" এর সমস্ত উপস্থিতি প্রতিস্থাপন করতে চাইলে কাজ করে না।
ডাকা

@ সুডোম্যান আমি আরও কিছু বিকল্প যুক্ত করেছি যেহেতু আপনার ইতিমধ্যে একটি চলকটিতে লাইন রয়েছে line
টেরডন

বাশের printfবিল্টিনের মতো কার্যকারিতা রয়েছে quotemeta- printf '%q\n' "$line"এটি আইআইআরসি করা উচিত।
অপরিসাপ

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