का उपयोग कर sed
:
sed 's/^[^"]*"\([^"]*\)".*/\1/'
इसके लिए लग रहा है: लाइन की शुरुआत, गैर-उद्धरणों की एक श्रृंखला, एक दोहरे उद्धरण, गैर-उद्धरणों की एक श्रृंखला पर कब्जा, एक डबल उद्धरण और रेखा पर कुछ और, और कैप्चर की गई सामग्री द्वारा प्रतिस्थापित करता है।
$ sed 's/^[^"]*"\([^"]*\)".*/\1/' <<'EOF'
> xyz... rsync: "/home/path/to/file": Permission denied (13) rsync:
> "/home/path/to/file1": Permission denied (13) rsync:
> "/home/path/to/file2": Permission denied (13) rsync:
> "/home/path/to/file3": Permission denied (13)
> EOF
/home/path/to/file
/home/path/to/file1
/home/path/to/file2
/home/path/to/file3
$
जीएनयू के साथ आरएचईएल 5 लिनक्स पर टेस्ट करें sed
, लेकिन केवल उन विशेषताओं का उपयोग करके जिन्होंने 7 वें संस्करण यूनिक्स ™ संस्करण में काम किया होगा sed
।
संयोग से, यह करने के लिए थोड़ा सरल तरीका दो स्थानापन्न आदेशों के साथ है; पहले डबल उद्धरण को खाली स्ट्रिंग सहित (जिसमें शून्य या अधिक गैर-उद्धरणों का अनुक्रम है और बाद में दोहरे उद्धरण सहित) सब कुछ बदल दें; अब कुछ भी नहीं करने के लिए पहली दोहरी बोली के बाद सब कुछ बदल:
sed 's/^[^"]*"//; s/".*//'
संयोग से, आपके द्वारा कमांड की गई (`sed -n '/" /, / "/ p') एक लाइन से प्रिंट होती है जिसमें एक डबल कोटे से अगली लाइन होती है जिसमें डबल कोट्स होते हैं, बिना लाइनों को एडिट किए। यही कारण है कि यह आपके लिए काम नहीं कर रहा था - यह वही किया जो आपने पूछा था, लेकिन आपने जो करने के लिए कहा था वह वह नहीं था जो आप इसे करने के लिए कहने का इरादा रखते थे।
दक्षता-वार, प्रदर्शन में एक औसत दर्जे का अंतर होने की संभावना नहीं है। रखरखाव में आसानी के संदर्भ में, मुझे संदेह है कि उत्तरार्द्ध मस्तिष्क की कोशिकाओं पर कम कर है।