লিনাক্সের ট্যাবগুলির সাথে সাদা স্থানগুলি প্রতিস্থাপন করুন


100

আমি কোনও প্রদত্ত পাঠ্য ফাইলে লিনাক্সের ট্যাবগুলির সাথে সাদা স্থানগুলি কীভাবে প্রতিস্থাপন করব?

উত্তর:


169

আনসপ্যান্ড (1) প্রোগ্রামটি ব্যবহার করুন


UNEXPAND(1)                      User Commands                     UNEXPAND(1)

NAME
       unexpand - convert spaces to tabs

SYNOPSIS
       unexpand [OPTION]... [FILE]...

DESCRIPTION
       Convert  blanks in each FILE to tabs, writing to standard output.  With
       no FILE, or when FILE is -, read standard input.

       Mandatory arguments to long options are  mandatory  for  short  options
       too.

       -a, --all
              convert all blanks, instead of just initial blanks

       --first-only
              convert only leading sequences of blanks (overrides -a)

       -t, --tabs=N
              have tabs N characters apart instead of 8 (enables -a)

       -t, --tabs=LIST
              use comma separated LIST of tab positions (enables -a)

       --help display this help and exit

       --version
              output version information and exit
. . .
STANDARDS
       The expand and unexpand utilities conform to IEEE Std 1003.1-2001
       (``POSIX.1'').

4
ওহ, কখনই প্রসারিত / আনস্পান্ডের অস্তিত্ব জানত না। আমি বিপরীতটি করার চেষ্টা করছিলাম এবং প্রসারিত হওয়ার সাথে trবা তার সাথে জড়িত হওয়ার চেয়ে নিখুঁত ছিল sed
ইব্রাহিম

4
রেকর্ডের জন্য, প্রসারিত / আনস্প্যান্ড- স্ট্যান্ড স্ট্যান্ডার্ড ইউটিলিটিগুলি
কোজিরো

4
এগুলি দুর্দান্ত যে এগুলি মান। আমি ইউনিক্স দর্শন পছন্দ করি । যদিও এটি জায়গায় করতে পারে ভাল হবে।
ম্যাথু ফ্ল্যাশেন

4
আমার মনে হয় না এখানে আনস্প্যান্ড স্প্যান্ড
ওলালা

13
কেবল একটি সতর্কতা - আনস্প্যান্ডপ্যা্যান্ড কোনও একক স্থানকে একটি ট্যাবে রূপান্তর করবে না। আপনার যদি 0x20 অক্ষরের সমস্ত রান অন্ধভাবে একক ট্যাবে রূপান্তর করতে হয় তবে আপনার একটি আলাদা সরঞ্জাম প্রয়োজন।
স্টিভ এস

44

আমি মনে করি আপনি এজেড দিয়ে চেষ্টা করতে পারেন

awk -v OFS="\t" '$1=$1' file1

বা এসইডি যদি আপনি উপস্থাপন করেন

sed 's/[:blank:]+/,/g' thefile.txt > the_modified_copy.txt

অথবা এমনকি ট্র

tr -s '\t' < thefile.txt | tr '\t' ' ' > the_modified_copy.txt

অথবা স্যাম বিসবি দ্বারা চালিত টিআর সমাধানের সরলিকৃত সংস্করণ

tr ' ' \\t < someFile > someFile

4
আপনার সেড উদাহরণে, সেরা অনুশীলনগুলি নির্দেশ করে যে আপনি দক্ষতা / গতির কারণে সিডের চেয়ে একক অক্ষর প্রতিস্থাপন করতে ট্র ব্যবহার করেন। এছাড়াও, টিআর উদাহরণটি আরও সহজ এটি:tr ' ' \\t < someFile > someFile
স্যাম বিসবি

4
অবশ্যই, ট্রের সিডের চেয়ে ভাল পারফরম্যান্স রয়েছে তবে আমি ইউনিক্সকে ভালবাসার মূল কারণ হ'ল কিছু করার অনেক উপায় রয়েছে। আপনি যদি এই প্রতিস্থাপনটি অনেক বার করার পরিকল্পনা করে থাকেন তবে আপনি একটি ভাল পারফরম্যান্স সহ সমাধানটি সন্ধান করতে পারেন, তবে আপনি যদি একবার এটি করতে যাচ্ছেন তবে আপনি একটি সমাধানের জন্য পৃথক করবেন যা আপনাকে এমন কমান্ড জড়িত যা আপনাকে বিশ্বাসযোগ্য মনে করবে।
জোনাথন

4
তর্ক সেড কাজটি করার জন্য আমাকে ট্রায়াল এবং ত্রুটি ব্যবহার করতে হয়েছিল। আমাকে কেন এই জাতীয় প্লাস চিহ্নটি এড়িয়ে যেতে হবে তা আমার কোনও ধারণা নেই:ls -l | sed "s/ \+/ /g"
জেস

সঙ্গে awk -v OFS="\t" '$1=$1' file1আমি লক্ষ্য করেছি যে যদি আপনি নম্বরটি 0 (উদাঃ সঙ্গে একটি লাইন শুরুতে আছে যদি 0 1 2), তারপর লাইন ফলাফল থেকে ommitted করা হবে না।
নিকোলা নোভাক

@ জেস আপনি "সঠিক ডিফল্ট সিনট্যাক্স" রেজেক্সটি পেয়েছেন। ডিফল্টরূপে সিড ট্রিট সিঙ্গল (আনসকেপড) প্লাস সাইনকে সরল চরিত্র হিসাবে। '?', ... এর মতো আরও কয়েকটি চরিত্রের ক্ষেত্রেও এটি একই সত্য: আপনি এখানে আরও তথ্য পেতে পারেন: gnu.org/software/sed/manual/html_node/… । অনুরূপ সিনট্যাক্স বিশদ এখানে পাওয়া যাবে (নোট করুন এটি গ্রেপের জন্য মানুষ, সেড নয়): gnu.org/software/grep/manual/grep.html# বেসিক-vs- প্রসারিত
ভিক্টর ইয়ারেমা

13

পার্ল ব্যবহার :

perl -p -i -e 's/ /\t/g' file.txt

4
একক ট্যাব দিয়ে টানা ফাঁকা স্থান প্রতিস্থাপনের ক্ষেত্রে একই সমস্যা ছিল। পার্ল রিজেক্সেপটিতে কেবল '+' যুক্ত করে কাজ করেছিলেন।
টড

যদিও, অবশ্যই আমি তার বিপরীতে করতে চেয়েছিলাম: ট্যাবগুলিকে দুটি স্পেসে রূপান্তর করুন:perl -p -i -e 's/\t/ /g' *.java
টিমপি

আমি কি এটি পুনরাবৃত্তি করতে পারি?
অ্যারন ফ্র্যাঙ্ক

এটি ছিল আমার জন্য একমাত্র বৈকল্পিক; আমি s/ {4}/4-স্পেস ইনডেন্টিংটিকে ট্যাবে রূপান্তরিত করতাম ।
ক্রেজিপাইরো

10

ভাল টিআর কমান্ড:

tr [:blank:] \\t

এটি গ্রেপ, কাটা ইত্যাদির সাথে আরও প্রক্রিয়াজাতকরণের জন্য , আনজিপ-এল , বলার আউটপুট পরিষ্কার করবে

যেমন,

unzip -l some-jars-and-textfiles.zip | tr [:blank:] \\t | cut -f 5 | grep jar

এটি কাজ করার জন্য আমার উদ্ধৃতি ব্যবহার করতে হবে না:tr [:blank:] \\t
Anmer An

3

প্লেইন টেক্সট ফাইলগুলিতে শক্ত ট্যাবগুলিতে নরম ট্যাবগুলিকে পুনরায় রূপান্তর করতে নিম্নলিখিত স্ক্রিপ্টটি ডাউনলোড করুন এবং চালান।

ফোল্ডারটির ভিতরে থেকে স্ক্রিপ্টটি স্থাপন করুন এবং চালিত করুন যাতে প্লেইন পাঠ্য ফাইল রয়েছে।

#!/bin/bash

find . -type f -and -not -path './.git/*' -exec grep -Iq . {} \; -and -print | while read -r file; do {
    echo "Converting... "$file"";
    data=$(unexpand --first-only -t 4 "$file");
    rm "$file";
    echo "$data" > "$file";
}; done;

2

বর্তমান জিরের অধীনে প্রতিটি .js ফাইলটিকে ট্যাবগুলিতে রূপান্তর করার জন্য উদাহরণ কমান্ড (কেবলমাত্র শীর্ষস্থানীয় স্থানগুলি রূপান্তরিত হবে):

find . -name "*.js" -exec bash -c 'unexpand -t 4 --first-only "$0" > /tmp/totabbuff && mv /tmp/totabbuff "$0"' {} \;

উইন্ডোজ on-এ সাইগউইনে পরীক্ষা করা হয়েছিল
আরকোড

1

আপনি ব্যবহার করতে পারেন astyle। আমি এটি বেশ কার্যকর বলে মনে করেছি এবং এর বেশ কয়েকটি বিকল্পও রয়েছে:

Tab and Bracket Options:
   If  no  indentation  option is set, the default option of 4 spaces will be used. Equivalent to -s4 --indent=spaces=4.  If no brackets option is set, the
   brackets will not be changed.

   --indent=spaces, --indent=spaces=#, -s, -s#
          Indent using # spaces per indent. Between 1 to 20.  Not specifying # will result in a default of 4 spaces per indent.

   --indent=tab, --indent=tab=#, -t, -t#
          Indent using tab characters, assuming that each tab is # spaces long.  Between 1 and 20. Not specifying # will result in a default assumption  of
          4 spaces per tab.`

0

আপনি যদি কোনও ট্যাবের সাহায্যে একটি লাইনে পরপর সমস্ত জায়গাগুলি প্রতিস্থাপনের কথা বলছেন tr -s '[:blank:]' '\t'

[root@sysresccd /run/archiso/img_dev]# sfdisk -l -q -o Device,Start /dev/sda
Device         Start
/dev/sda1       2048
/dev/sda2     411648
/dev/sda3    2508800
/dev/sda4   10639360
/dev/sda5   75307008
/dev/sda6   96278528
/dev/sda7  115809778
[root@sysresccd /run/archiso/img_dev]# sfdisk -l -q -o Device,Start /dev/sda | tr -s '[:blank:]' '\t'
Device  Start
/dev/sda1       2048
/dev/sda2       411648
/dev/sda3       2508800
/dev/sda4       10639360
/dev/sda5       75307008
/dev/sda6       96278528
/dev/sda7       115809778

আপনি যদি সমস্ত শ্বেত স্থান (যেমন স্থান, ট্যাব, নিউলাইন ইত্যাদি) প্রতিস্থাপনের কথা বলছেন তবে tr -s '[:space:]'

[root@sysresccd /run/archiso/img_dev]# sfdisk -l -q -o Device,Start /dev/sda | tr -s '[:space:]' '\t'
Device  Start   /dev/sda1       2048    /dev/sda2       411648  /dev/sda3       2508800 /dev/sda4       10639360        /dev/sda5       75307008        /dev/sda6     96278528        /dev/sda7       115809778  

আপনি যখন একটি ট্যাব-ক্ষতিগ্রস্ত ফাইল ফিক্সিং বিষয়ে কথা হয়, তাহলে ব্যবহার expandএবং unexpandঅন্যান্য উত্তর হিসাবে উল্লেখ করেছে।



-1

এটি এক স্থান দিয়ে টানা স্পেসগুলি প্রতিস্থাপন করবে (তবে ট্যাব নয়)।

tr -s '[:blank:]'

এটি একটি ট্যাব দিয়ে একটানা স্পেস প্রতিস্থাপন করবে।

tr -s '[:blank:]' '\t'

আসলে, সঙ্গে -cএটা পরপর অক্ষর আছে যা হয় প্রতিস্থাপন না স্পেস।
উইজেডসবারমারিনার

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