लिनक्स में टैब के साथ व्हाट्सएप को बदलें


98

मैं दिए गए पाठ फ़ाइल में लिनक्स में टैब के साथ व्हाट्सएप कैसे बदल सकता हूं?

जवाबों:


168

Unexpand (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
वाह, कभी पता नहीं विस्तार / unexpand मौजूद था। मैं विपरीत करते हैं और विस्तार करने के लिए कोशिश कर रहा था गड़बड़ करने के साथ चारों ओर होने के बजाय सही था trया sed
इब्राहिम

4
रिकॉर्ड के लिए, विस्तार / unexpand मानक उपयोगिताओं हैं
कोजीरो

4
इतना ठंडा कि ये मानक हैं। मुझे UNIX दर्शन पसंद है । अगर यह जगह में कर सकता है तो अच्छा होगा।
मैथ्यू फ्लेशेन

3
मुझे नहीं लगता कि unexpand यहाँ काम करेगा .. यह केवल प्रमुख रिक्त स्थान और केवल दो या अधिक स्थानों के साथ परिवर्तित होता है .. यहाँ देखें: lists.gnu.org/archive/html/bug-textutils/2001-01/msg00025.html
ओलाला

13
बस एक सावधानी - अनएक्सपांड एक एकल स्थान को टैब में परिवर्तित नहीं करेगा। यदि आपको 0x20 वर्णों के सभी रन को नेत्रहीन रूप से एक टैब में बदलने की आवश्यकता है, तो आपको एक अलग टूल की आवश्यकता है।
स्टीव एस।

44

मुझे लगता है कि आप जाग के साथ कोशिश कर सकते हैं

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

या यदि आप पीड़ित हैं, तो SED

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

या यहां तक ​​कि tr

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

या सैम Bisbee द्वारा sued tr समाधान का एक सरलीकृत संस्करण

tr ' ' \\t < someFile > someFile

4
आपके सेड उदाहरण में, सर्वोत्तम प्रथाएँ बताती हैं कि आप दक्षता / गति कारणों से एकल वर्णों को बदलने के लिए tr का उपयोग करते हैं। इसके अलावा, ट्र उदाहरण इस तरह से बहुत आसान है:tr ' ' \\t < someFile > someFile
सैम बिस्बी

2
बेशक, tr में sed की तुलना में बेहतर प्रदर्शन है, लेकिन मेरे पास यूनिक्स को प्यार करने का मुख्य कारण यह है कि कुछ करने के कई तरीके हैं। यदि आप कई बार इस प्रतिस्थापन को करने की योजना बनाते हैं, तो आप एक अच्छे प्रदर्शन के साथ एक समाधान खोजेंगे, लेकिन यदि आप इसे केवल एक बार करने जा रहे हैं, तो आप समाधान के लिए सेच करेंगे जिसमें एक कमांड शामिल है जो आपको असहज महसूस कराता है।
जोनाथन

2
आर्ग। मुझे sed काम करने के लिए परीक्षण और त्रुटि का उपयोग करना पड़ा। मुझे नहीं पता कि मुझे इस तरह से प्लस चिह्न से क्यों बचना था:ls -l | sed "s/ \+/ /g"
जेस

इसके साथ awk -v OFS="\t" '$1=$1' file1मैंने देखा कि यदि आपके पास 0 (जैसे 0 1 2) के साथ शुरू होने वाली रेखा है , तो परिणाम से लाइन को ommitted किया जाएगा।
निकोला नोवाक

@Jess आपको "सही डिफ़ॉल्ट सिंटैक्स" regex मिला। डिफ़ॉल्ट सेड सिंगल (अनस्पेकड) के साथ-साथ सिंपल कैरेक्टर के रूप में साइन करें। कुछ अन्य पात्रों जैसे '?', के लिए भी यही सच है। आप अधिक जानकारी यहाँ पा सकते हैं: gnu.org/software/rew/manual/html_node/… । इसी तरह के वाक्यविन्यास विवरण यहां देखे जा सकते हैं (ध्यान दें कि यह grep के लिए आदमी है, sed नहीं): gnu.org/software/grep/manual/grep.html#Basic-vs-Extended
विक्टर यारेमा

11

पर्ल का उपयोग करना :

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

3
एक ही टैब के साथ लगातार रिक्त स्थान को बदलने के साथ एक समान समस्या थी। Perl ने regexp को केवल '+' के साथ जोड़ने का काम किया।
टॉड

यद्यपि, निश्चित रूप से, मैं इसके विपरीत करना चाहता था: टैब को दो स्थानों में परिवर्तित करें:perl -p -i -e 's/\t/ /g' *.java
टिम जूल

क्या मैं इसे पुनरावर्ती रूप से कर सकता हूं?
एरॉन फ्रेंके

9

बेहतर tr कमांड:

tr [:blank:] \\t

यह unreip -l , grep, कट, आदि के साथ आगे की प्रक्रिया के लिए , आउटपुट को साफ करेगा ।

जैसे,

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

: मैं उद्धरण चिह्नों का उपयोग करने के लिए काम करने के लिए इसे पाने के लिए की जरूरत नहीं हैtr [:blank:] \\t
Ömer एक

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 फ़ाइल वर्तमान dir से टैब के अंतर्गत (केवल प्रमुख स्थान कनवर्ट किए जाते हैं):

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

खिड़कियों पर
साइबरविन

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यह लगातार वर्णों की जगह लेता है जो हैं रिक्त स्थान नहीं हैं।
विंगड्यूसबम्बर

1
सवाल टैब के बारे में है, यह कोई जवाब नहीं है।
मैथ्यू पढ़ें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.