मैं लगातार 2 पंक्तियों से मेल खाना चाहता हूं, फिर इसे बदल दें। उदाहरण के लिए यह पैटर्न: [0-9]\(.*\)\n[0-9]\(.*\) तो मूल रूप से दोनों पंक्तियों को एक संख्या से शुरू किया जाता है। फिर इसे बदलें: \2\n\1 मतलब लाइन कंटेंट को स्वैप करें और लीडिंग नंबर को डिच करें। उदाहरण फ़ाइल 1:

 adfa
adaf
dfd
1 1a
2 2b
3 3d
adfa
sdfa
4 4a
5 5b
6 6d
7 7k

उदाहरण फ़ाइल 2:

 adfa
adaf
dfd
aaa
1 1a
2 2b
3 3d
sdfa
4 4a
5 5b
6 6d
7 7k

ऑनलाइन कई उत्तर N; या 1!N; का उपयोग करने का सुझाव देते हैं लेकिन यह काम नहीं करेगा। इसका कारण यह है कि N; पहली पंक्ति से शुरू होगा, फिर प्रत्येक 2 पंक्तियों को पढ़ें, 1!N; दूसरी पंक्ति से शुरू करें, फिर प्रत्येक 2 पंक्तियों को पढ़ें। लेकिन मैं जो चाहता हूं वह प्रत्येक पंक्ति और उसकी अगली पंक्ति को मिलान करने के लिए पढ़ना है। यदि N और N+1 लाइनों का मिलान होता है तो हम इस 2 लाइनों को बदल देते हैं, फिर मिलान करने के लिए N+3 और N+4 लाइन पर चले जाते हैं, यदि कोई मेल नहीं है, तो हम N+4 और N+5 पर चले जाते हैं ... दोनों उदाहरण फाइलों के लिए अपेक्षित परिणाम निम्नलिखित होंगे:

2b
1a
5b
4a
7k
6d

विफल आदेश:

sed 'N;s%[0-9]\(.*\)\n[0-9]\(.*\)%\2\n\1%;t;d' test0.txt
 3d
 2b
 5b
 4a
 7k
 6d

sed 'N;s%[0-9]\(.*\)\n[0-9]\(.*\)%\2\n\1%;t;d' test1.txt
 2b
 1a
 5b
 4a
 7k
 6d


sed '1!N;s%[0-9]\(.*\)\n[0-9]\(.*\)%\2\n\1%;t;d' test0.txt
 2b
 1a
 6d
 5b
7 7k
sed '1!N;s%[0-9]\(.*\)\n[0-9]\(.*\)%\2\n\1%;t;d' test.txt
 3d
 2b
 6d
 5b
7 7k
sed
1
Wang 5 मई 2018, 03:10

2 जवाब

सबसे बढ़िया उत्तर

यदि आप d के बजाय D का उपयोग करते हैं, यानी पैटर्न-स्पेस की पहली पंक्ति को हटाते हैं और दोहराते हैं-अगर-नहीं-खाली, तो यह काम करता है, जैसे:

sed -nE 'N; s/^[0-9] (.*)\n[0-9] (.*)/\2\n\1/; ta; D; :a; p' infile

या @potong के सुझाव के अनुसार क्लीनर भी:

sed 'N;/^[0-9] \(.*\)\n[0-9] \(.*\)/!D;s//\2\n\1/' infile

आउटपुट:

2b
1a
5b
4a
7k
6d
2
Thor 5 मई 2018, 23:02

इसे प्राप्त करने का एक अपूर्ण तरीका

sed -nr '/^[0-9]/{N;s/.*([0-9][[:alpha:]]).*([0-9][[:alpha:]])/\2\n\1/p}'
  1. हम N का उपयोग केवल तभी करते हैं जब रेखा किसी संख्या से शुरू होती है।
  2. तब हम अपनी आवश्यकता के अनुसार नियमित अभिव्यक्ति का उपयोग कर सकते थे।

यह रेगेक्सपी आपकी उदाहरण फ़ाइल द्वारा डिज़ाइन किया गया है, और यदि आपकी फ़ाइल का प्रारूप बदल गया है तो इसे समायोजित किया जाना चाहिए।

1
paul 5 मई 2018, 03:42