2012-05-23 10 views
5

यहां एक स्क्रिप्ट है जो file.txt फ़ाइल से शब्दों को पढ़ती है और प्रत्येक पंक्ति में प्रत्येक शब्द आउटपुट प्रदर्शित करती है, लेकिन मैं सभी आउटपुट को एक ही पंक्ति में प्रदर्शित करना चाहता हूं।शैल स्क्रिप्ट में एकल पंक्ति में grep का आउटपुट कैसे प्राप्त करें?

 
#!/bin/sh 
echo 
echo "Enter the word to be translated" 
read a 
IFS=" "  # Set the field separator 
set $a  # Breaks the string into $1, $2, ... 
for a # a for loop by default loop through $1, $2, ... 
    do 
    { 
    b= grep "$a" replaced.txt | cut -f 2 -d" " 
    } 
    done 

"replaced.txt" फाइल की सामग्री नीचे दिया गया है

 
hllo HELLO 
m AM 
rshbh RISHABH 
jn JAIN 
hw HOW 
ws WAS 
ur YOUR 
dy DAY 

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

+0

आपकी स्क्रिप्ट अपूर्ण है। 'Echo' (या 'printf') कथन कहां है? घुंघराले ब्रेसिज़ 'do' /' done' के साथ अनावश्यक हैं। आपको केवल एक या दूसरे की आवश्यकता है। –

उत्तर

9

आपका पूरी स्क्रिप्ट द्वारा प्रतिस्थापित किया जा सकता है:।

#!/bin/bash 
echo 
read -r -p "Enter the words to be translated: " a 
echo $(printf "%s\n" $a | grep -Ff - replaced.txt | cut -f 2 -d ' ') 

लूप की कोई आवश्यकता नहीं है।

echo एक निर्विवाद तर्क के साथ एम्बेडेड न्यूलाइन को हटा देता है और एक स्थान के साथ कई रिक्त स्थान और/या टैब के प्रत्येक अनुक्रम को प्रतिस्थापित करता है।

2

कमांड के आउटपुट से पिछली न्यूलाइन को हटाने के लिए एक हैकिश-लेकिन-आसान तरीका यह है कि इसे printf %s "$(...) " में लपेटें। अर्थात, आप इसे बदल सकते हैं:

b= grep "$a" replaced.txt | cut -f 2 -d" " 
इस के लिए

:

printf %s "$(grep "$a" replaced.txt | cut -f 2 -d" ") " 

और बाद पाश पूरा करता है एक echo आदेश जोड़ें।

$(...) नोटेशन "कमांड प्रतिस्थापन" सेट करता है: कमांड में grep "$a" replaced.txt | cut -f 2 -d" " चलाया जाता है, और इसके आउटपुट, किसी भी पिछली न्यूलाइन को घटाकर, तर्क-सूची में प्रतिस्थापित किया जाता है। तो, उदाहरण के लिए, यदि आदेश आउटपुट DAY, फिर ऊपर इस के बराबर है:

printf %s "DAY " 

(printf %s ... अंकन बराबर है echo -n ... — यह सिवाय उसके व्यवहार है कि उनके पीछे न्यू लाइन — जोड़े बिना एक स्ट्रिंग आउटपुट के लिए अधिक portably सुसंगत, और यह गलत व्यवहार नहीं किया जाएगा स्ट्रिंग आप प्रिंट करना चाहते -n या -e या whatnot के साथ शुरू करने के लिए होता है अगर)

1

तुम भी कटौती के बाद एक पाइप में

awk 'BEGIN { OFS=": "; ORS=" "; } NF >= 2 { print $2; }' 

उपयोग कर सकते हैं।

संबंधित मुद्दे