2012-06-08 23 views
15

में तारों, फ़ाइलों और प्रोग्राम आउटपुट को जोड़ना, केस केस, मेरे मामले में, सीएसएस फ़ाइल concatenation, इसे कम करने से पहले है। दो सीएसएस फ़ाइलों concat करने के लिए:बाश

sed 's/foo/bar/g' 3.css | cat 1.css - 2.css > out.css 
:

cat 1.css 2.css > out.css 

एक ही की स्थिति में कुछ पाठ जोड़ने के लिए, मैं

cat 1.css <<SOMESTUFF 2.css > out.css 
This will end in the middle. 
SOMESTUFF 

एक अन्य कार्यक्रम से STDOUT को जोड़ने के लिए क्या कर सकते हैं

अब तक इतना अच्छा है। लेकिन मैं नियमित रूप से परिस्थितियों में आ जाता हूं, जहां मुझे कई तारों, फ़ाइलों और यहां तक ​​कि प्रोग्राम आउटपुट को एक साथ जोड़ने की आवश्यकता होती है, जैसे कि कॉपीराइट हेडर, sed(1) द्वारा प्रीप्रोसेस्ड फाइलें और इसी तरह। ऑर्डर चुनने की स्वतंत्रता रखते हुए, मैं जितना संभव हो सके छोटे चरणों और अस्थायी फ़ाइलों में उन्हें एक साथ जोड़ना चाहता हूं।

संक्षेप में, मैं बैश में यथासंभव कम चरणों में यह करने के लिए एक तरह से तलाश कर रहा हूँ: (

command [string|file|output]+ > concatenated 
# note the plus ;-) --------^ 

मूल रूप से, एक cat कई STDINs को संभालने के लिए पर्याप्त होगा होने, मुझे लगता है,

<(echo "FOO") <(sed ...) <(echo "BAR") cat 1.css -echo1- -sed- 2.css -echo2- 

की तरह लेकिन मैं यह देखने के लिए असफल, मैं कैसे उन तक पहुँच सकते हैं)

उत्तर

23

यह काम करता है:

cat 1.css <(echo "FOO") <(sed ...) 2.css <(echo "BAR") 
+0

डी ओह देखें! यह सबसे आसान समाधान है (मेरे मामले में), इसलिए मैं इसे स्वीकार करूंगा। – Boldewyn

+1

बेशक @ बोल्डविन ने '> concatenated.css' या '| जोड़ा होगा। इस तरह की समस्या के लिए काम करने के लिए अंत में संकलक ':' cat file1.css <(echo "FOO") <(कमांड [स्ट्रिंग | फ़ाइल | आउटपुट]) file2.css <(echo "बार")> concatenated ' – hobs

12

आप कर सकते हैं:।

echo "$(command 1)" "$(command 2)" ... "$(command n)" > outputFile 
+0

आप सफेद स्थान को संरक्षित करने के लिए उन आदेश प्रतिस्थापन उद्धृत करने के लिए की जरूरत है। –

+0

@ डेनिसविल्लियमसन: धन्यवाद। मैंने अपना जवाब तय कर दिया। – nhahtdh

16

आप एक subshell है, जो एक फ़ाइल पर भेज दिया जाएगा के सभी आदेशों जोड़ सकते हैं:

(
    cat 1.css 
    echo "FOO" 
    sed ... 
    echo BAR 
    cat 2.css 
) > output 

तुम भी >> के साथ एक फ़ाइल को संलग्न कर सकते हैं। उदाहरण के लिए:

cat 1.css > output 
echo "FOO" >> output 
sed ... >> output 
echo "BAR" >> output 
cat 2.css >> output 

(यह संभवतः खोलता है और फ़ाइल को बार-बार बंद कर देता है)

+0

आप एक ही काम करने के लिए घुंघराले ब्रेस ब्लॉक का उपयोग कर सकते हैं। –

+0

धन्यवाद। हां, यह ऐसा करेगा, पूरी तरह से उस विकल्प को याद किया। +1। – Boldewyn

+0

अगर मुझे गलत नहीं लगता है,() POSIX-compliant है, जबकि कमांड-प्रतिस्थापन एक बैश एक्सटेंशन है, जिसे 2008 तक साइगविन बैश में अनुपूरक किया गया था। – Leo

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