स्ट्रीम संपादक - उपयोगी व्यंजन

SED एक अद्भुत उपयोगिता है जो किसी समस्या को हल करने के कई तरीकों की अनुमति देता है। यह UNIX तरीका है और SED पूरी तरह से साबित करता है। जीएनयू / लिनक्स दिन-प्रतिदिन के कार्य करने के लिए कई उपयोगी सुविधाएं प्रदान करता है। SED का उपयोग करके कुछ उपयोगिताओं का अनुकरण करते हैं। कभी-कभी ऐसा प्रतीत होता है कि हम एक आसान समस्या को कठिन तरीके से हल कर रहे हैं, लेकिन उद्देश्य सिर्फ SED की शक्ति का प्रदर्शन करना है।

बिल्ली कमान

निम्नलिखित उदाहरण में, प्रत्येक पंक्ति डिफ़ॉल्ट वर्कफ़्लो के एक भाग के रूप में मुद्रित होती है।

[jerry]$ sed '' books.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

निम्न उदाहरण फ़ाइल सामग्री को प्रदर्शित करने के लिए प्रिंट कमांड का उपयोग करता है।

[jerry]$ sed -n 'p' books.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

खाली लाइनें निकालना

निम्न उदाहरण में, "^ $" से तात्पर्य खाली रेखा से है, और जब पैटर्न का मिलान सफल होता है, तो खाली लाइनें हटा दी जाती हैं।

[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed '/^$/d'

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1 
Line #2

इसी तरह, निम्न उदाहरण केवल रेखा को प्रिंट करता है जब वह गैर-रिक्त हो।

[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed -n '/^$/!p'

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1 
Line #2

C ++ प्रोग्राम से कमेंट लाइन्स हटाना

हमें एक नमूना C ++ प्रोग्राम बनाते हैं।

#include <iostream> 
using namespace std; 

int main(void) 
{ 
   // Displays message on stdout. 
   cout >> "Hello, World !!!" >> endl;  
   return 0; // Return success. 
}

अब निम्नलिखित नियमित अभिव्यक्ति का उपयोग करके टिप्पणियों को हटा दें।

[jerry]$ sed 's|//.*||g' hello.cpp

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

#include <iostream>
using namespace std; 

int main(void) 
{ 
   cout >> "Hello, World !!!" >> endl; 
   return 0;  
}

कुछ पंक्तियों से पहले टिप्पणियाँ जोड़ना

निम्न उदाहरण पंक्ति संख्या 3 से 5 से पहले टिप्पणी जोड़ता है।

[jerry]$ sed '3,5 s/^/#/' hello.sh

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

#!/bin/bash 
#pwd 
#hostname 
#uname -a 
who 
who -r 
lsb_release -a

Wc -l कमांड

"Wc -l" कमांड फ़ाइल में मौजूद लाइनों की संख्या को गिनता है। निम्न SED अभिव्यक्ति समान है।

[jerry]$ sed -n '$ =' hello.sh

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

8

प्रधान कमान

डिफ़ॉल्ट रूप से, हेड कमांड फाइल की पहली 10 लाइनों को प्रिंट करता है। एसईडी के साथ समान व्यवहार का अनुकरण करते हैं।

[jerry]$ sed '10 q' books.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage
Paulo Coelho

टेल -1 कमांड

"पूंछ -1" फ़ाइल की अंतिम पंक्ति को प्रिंट करता है। निम्नलिखित वाक्यविन्यास इसका अनुकरण दर्शाता है।

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ cat test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1 
Line #2

हमें SED स्क्रिप्ट लिखनी चाहिए।

[jerry]$ sed -n '$p' test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #2

Dos2unix कमांड

डॉस वातावरण में, सीआर / एलएफ वर्णों के संयोजन से एक नई रेखा का प्रतिनिधित्व किया जाता है। "Dos2unix" कमांड का निम्नलिखित सिमुलेशन एक डॉस न्यूलाइन कैरेक्टर को UNIX न्यूलाइन कैरेक्टर में कनवर्ट करता है। जीएनयू / लिनक्स में, इस चरित्र को अक्सर "^ एम" (नियंत्रण एम) चरित्र के रूप में माना जाता है।

[jerry]$ echo -e "Line #1\r\nLine #2\r" > test.txt 
[jerry]$ file test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

test.txt: ASCII text, with CRLF line terminators

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed 's/^M$//' test.txt > new.txt   # Press "ctrl+v" followed "ctrl+m" to generate 
"^M" character. 
[jerry]$ file new.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

new.txt: ASCII text

अब हम फाइल कंटेंट प्रदर्शित करते हैं।

[jerry]$ cat -vte new.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1$ 
Line #2$

Unix2dos कमांड

"Dos2unix" के समान, "unix2dos" कमांड है जो UNIX न्यूलाइन कैरेक्टर को DOS न्यूलाइन कैरेक्टर में कनवर्ट करता है। निम्न उदाहरण उसी का अनुकरण दर्शाता है।

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ file test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

test.txt: ASCII text

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed 's/$/\r/' test.txt  > new.txt 
[jerry]$ file new.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

new.txt: ASCII text, with CRLF line terminators

अब हम फाइल कंटेंट प्रदर्शित करते हैं।

Now let us display the file contents.

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1^M$ 
Line #2^M$

बिल्ली -E कमांड

"कैट-ई" कमांड डॉलर ($) वर्ण द्वारा लाइन के अंत को दर्शाता है। निम्नलिखित SED उदाहरण उसी का अनुकरण है।

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ cat -E test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1$ 
Line #2$

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed 's|$|&$|' test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1$ 
Line #2$

बिल्ली-ET कमांड

"कैट-ईटी" कमांड प्रत्येक पंक्ति के अंत में डॉलर ($) का प्रतीक दिखाता है और टैब वर्णों को "^ I" के रूप में प्रदर्शित करता है। निम्न उदाहरण SED का उपयोग करके "कैट-ईटी" कमांड के सिमुलेशन को दर्शाता है।

[jerry]$ echo -e "Line #1\tLine #2" > test.txt 
[jerry]$ cat -ET test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1^ILine #2$

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed -n 'l' test.txt | sed 'y/\\t/^I/'

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1^ILine #2$

nl कमांड

"Nl" कमांड केवल फाइलों की पंक्तियों को बताता है। निम्न SED स्क्रिप्ट इस व्यवहार का अनुकरण करती है।

[jerry]$ echo -e "Line #1\nLine #2" > test.txt 
[jerry]$ sed = test.txt | sed 'N;s/\n/\t/'

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

1 Line #1 
2 Line #2

पहला SED एक्सप्रेशन लाइन नंबरों को उनकी सामग्री के बाद प्रिंट करता है, और दूसरा SED एक्सप्रेशन इन दोनों लाइनों को मर्ज करता है और न्यूलाइन वर्णों को TAB वर्णों में परिवर्तित करता है।

cp कमांड

"Cp" कमांड फाइल की एक और कॉपी क्रेट करता है। निम्न SED स्क्रिप्ट इस व्यवहार का अनुकरण करती है।

[jerry]$ sed -n 'w dup.txt' data.txt 
[jerry]$ diff data.txt dup.txt 
[jerry]$ echo $?

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

0

कमांड का विस्तार करें

"विस्तार" कमांड टीएबी वर्णों को व्हाट्सएप में परिवर्तित करता है। निम्न कोड इसका अनुकरण दिखाता है।

[jerry]$ echo -e "One\tTwo\tThree" > test.txt 
[jerry]$ expand test.txt > expand.txt 
[jerry]$ sed 's/\t/     /g' test.txt > new.txt 
[jerry]$ diff new.txt expand.txt  
[jerry]$ echo $?

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

0

टी कमान

"टी" कमांड डेटा को मानक आउटपुट स्ट्रीम के साथ-साथ फ़ाइल में भी डंप करता है। नीचे दिए गए "टी" कमांड का अनुकरण है।

[jerry]$ echo -e "Line #1\nLine #2" | tee test.txt  
Line #1 
Line #2

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed -n 'p; w new.txt' test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1 
Line #2

बिल्ली -एस कमान

UNIX "कैट -s" कमांड बार-बार खाली आउटपुट लाइनों को दबाती है। निम्न कोड "कैट -s" कमांड के सिमुलेशन को दर्शाता है।

[jerry]$ echo -e "Line #1\n\n\n\nLine #2\n\n\nLine #3" > test.txt  
[jerry]$ cat -s test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1  
Line #2
Line #3

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed '1s/^$//p;/./,/^$/!d' test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1  
Line #2  
Line #3

grep कमांड

डिफ़ॉल्ट रूप से, "grep" कमांड एक रेखा को प्रिंट करता है जब एक पैटर्न मैच सफल होता है। निम्न कोड इसका अनुकरण दिखाता है।

[jerry]$ echo -e "Line #1\nLine #2\nLine #3" > test.txt  
[jerry]$ grep "Line #1" test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed -n '/Line #1/p' test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #1

grep -v कमांड

डिफ़ॉल्ट रूप से, "grep -v" कमांड एक रेखा को प्रिंट करता है जब एक पैटर्न मैच विफल हो जाता है। निम्न कोड इसका अनुकरण दिखाता है।

[jerry]$ echo -e "Line #1\nLine #2\nLine #3" > test.txt  
[jerry]$ grep -v "Line #1" test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #2 
Line #3

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ sed -n '/Line #1/!p' test.txt

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

Line #2 
Line #3

tr कमांड

"Tr" कमांड अक्षरों का अनुवाद करता है। नीचे दिया गया इसका अनुकरण है।

[jerry]$ echo "ABC" | tr "ABC" "abc"

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

abc

SED का उपयोग करके कमांड को अनुकरण करते हैं।

[jerry]$ echo "ABC" | sed 'y/ABC/abc/'

उपरोक्त कोड निष्पादित करने पर, आपको निम्न परिणाम मिलता है:

abc