विंडोज में कमांड आउटपुट की पहली एन लाइनें कैसे प्रदर्शित करें? (यूनिक्स कमांड "हेड" के बराबर)


17

मुझे यूनिक्स headकमांड के बराबर की आवश्यकता है (आउटपुट की पहली एन लाइनें प्रदर्शित करें)। यह मैं वर्तमान में उपयोग कर रहा हूँ:

tasklist | find /N " " | findstr /r \[[0-9]\]

उपरोक्त कोड tasklistआउटपुट के पहले 10 लाइनों को प्रदर्शित करता है । रेगेक्स का उपयोग करते हुए पहले 10 लाइनों find /N " "को findstr /r \[[0-9]\]निकालने के दौरान प्रत्येक पंक्ति की शुरुआत के लिए एक पंक्ति संख्या प्रस्तुत करता है ।

उपरोक्त कोड काम करता है, लेकिन मुझे किसी भी सीमा को निर्दिष्ट करने की आवश्यकता है । इस तथ्य के कारण कि विंडोज में मानकों के अनुसार नियमित अभिव्यक्ति को लागू नहीं किया जाता है, मुझे काम करने के लिए कुछ और नहीं मिल सकता है।

मैं एक cmd आउटपुट से मनमानी लाइनें कैसे निकाल सकता हूं? एक-लाइनर के साथ ऐसा करना महत्वपूर्ण है। कोई स्क्रिप्ट नहीं!


.....................
जीकासर

जवाबों:


36

शक्ति कोशिका।

PS C:\> netstat | Select -First 20

संपादित करें: मुझे लगता है कि आप जोर देकर कह रहे हैं कि आप केवल cmd.exe लगभग 1989 का उपयोग कर सकते हैं, लेकिन यह सच नहीं है। Powershell हर OS संस्करण Vista + में बेक किया गया है, और XP / 2003 पर इंस्टॉल करने योग्य है। यह है विंडोज के भविष्य।

संपादित करें: ठीक है, यह अपना रास्ता है।

C:\> netstat -an > temp.txt && for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" temp.txt ^| findstr /r "^%l:"') do @echo %b

नेटस्टैट के आउटपुट की पहली 10 लाइनों को प्रदर्शित करेगा।


5
मुझे कोई संदेह नहीं है कि PowerShell भविष्य है, लेकिन मुझे कुछ ऐसा चाहिए जो अब काम करता है। एक उद्यम वास्तविकता में, अक्सर हमारे तकनीकी सहायता विभाग के ग्राहकों के पास सैकड़ों विंडोज़ सर्वर होते हैं, जिनमें से कोई भी विस्टा, 7 या 8 नहीं है। मैं संभवतः कमांड को चलाने के लिए हर बार पावरस् लेल स्थापित करने में समय बर्बाद नहीं कर सकता, और न ही मैं। यहां तक ​​कि अधिकृत भी।
गाइकेसर

Cmd.exe यह है ...
रयान रीज़

वे सभी की आवश्यकता होगी एक w2k8r2 सर्वर है कि वे एक powerhell कमांड चलाने के लिए लॉग इन कर सकते हैं, क्या यह संभव है?
टोनी रो

मुझे नहीं पता कि 2K8 सर्वर हैं या नहीं, लेकिन रायन रीस का जवाब वही है जो मुझे चाहिए था। बहुत बहुत धन्यवाद रेयान!
जीकासर

1
कृपया भूल नहीं ... जवाब के रूप में चिह्नित ... स्वीकार किए जाते हैं ...: `( कोने में भ्रूण की स्थिति में कर्ल अप और सिसकना आत्म करने के लिए
रयान आरआईई

8

यदि आप एक यूनिक्स प्रकार के व्यक्ति हैं, तो शायद साइग्विन स्थापित करने से आपको अधिक परिचित वातावरण मिलता है।


2
नहीं, मुझे लगा कि मैंने इसे स्पष्ट कर दिया है, लेकिन मैं कुछ भी स्थापित नहीं कर सकता। यह विंडोज कमांड प्रोसेसर (cmd.exe) के साथ चलना चाहिए। कोई पॉवरशेल, कोई साइगविन, कोई स्क्रिप्ट नहीं।
गाइक्सर

3

" for" लूप का उपयोग करने की तुलना में एक आसान समाधान है जो बहुत आसान है ।

आइए एक उदाहरण के रूप में आउटपुट dir/o-d( dirव्युत्क्रम-क्रमादेश से) लें।

उदाहरण के लिए, यदि आप 1 से 16 लाइनों का उत्पादन करना चाहते हैं, तो उपयोग करें:

dir/o-d|findstr/n ^^|findstr "^[1-9]: ^1[0-6]:"

उदाहरण के लिए, यदि आप लाइनों का उत्पादन 16 से 45 करना चाहते हैं, तो उपयोग करें:

dir/o-d|findstr/n ^^|findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"

नमूना उत्पादन:

16:08/08/2016  08:43 AM    <DIR>          nacl_sdk
17:11/05/2016  10:48 PM    <DIR>          3b 2
18:28/04/2016  02:47 PM    <DIR>          sample
19:22/04/2016  10:07 PM    <DIR>          mysql test
20:16/04/2016  01:22 AM    <DIR>          3b
21:16/04/2016  01:10 AM             2,706 errorlog
22:16/04/2016  12:53 AM                 0 accesslog
...

टूट - फूट:

  1. सबसे पहले, पूरे आउटपुट का उपयोग करके डंप करें dir/o-d

  2. इसके बाद, प्रत्येक पंक्ति को " $Num:" के साथ प्रयोग में लाएँfindstr/n ^^

    • ^मतलब मैच की शुरुआत रेखा से होती है, और ^^क्या यह आवश्यक रूप से बच गया है क्योंकि हम cmd में हैं।

    • नोट: आपको इसके लिए उपयोग करने की आवश्यकता है findstrक्योंकि find/n" "रिक्त स्थान के बिना लाइनों से मेल नहीं खाएंगे।

  3. अंत में, उत्पादन का उपयोग कर फसल findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"

    • ^1[6-9]: 16 से 19 के लिए रेगेक्स है।

    • ^[2-3][0-9]: 20 - 39 के लिए रेगेक्स है।

    • ^4[0-5]: 40 से 45 के लिए रेगेक्स है।

    • findstr "a b c"साधन तार है जो या तो भाव से मेल खाते हैं a, bया c

इसके अलावा /programming//q/8844868/632951 देखें


यह एक अच्छा समाधान है, लेकिन अब आपके पास संख्या पहले से मौजूद है, क्या कोई अंतिम खोज कॉल में उनसे छुटकारा पा सकता है?
fschmitt

@ एफएसटीमिट, findstrचीजों को हटा नहीं सकता। मुझे लगता है कि आप उस मामले में एक लूप का उपयोग करने के लिए मजबूर हो सकते हैं।
पचेरियर

0

यह एक लाइन-कमांड है, मुझे आशा है कि यह आपके लिए भी काम करेगा।

@echo off&cls&for /f "tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=1 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=2 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=3 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=4 tokens=*" %a in (Graph.bat) do echo %a&pause>nul

:: Run this from CMD.exe and make sure that your file is in your current working directory.

::Replace Graph.bat with your file.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.