मेरे पास एक फाइल है जिसका नाम है common.txt जिसमें निरपेक्ष रास्तों की सूची शामिल है। उदाहरण के लिए:
/etc
/etc/group
/var/log/syslog
मेरे पास फाइलों का एक सेट भी है & LT; होस्ट नाम & gt; .txt इसमें निरपेक्ष रास्तों की सूची भी शामिल है। यहाँ एक उदाहरण है (इसे कॉल करें host1.txt ):
/root/.bashrc
/var/log/syslog
/etc/hosts
/bin/true
/etc
/sbin/rtmon
/etc/group
मैं हर उस रास्ते को हटाना चाहूंगा जो सामने आता है common.txt फ़ाइलों के सेट में हर फ़ाइल से & LT; फ़ाइल नाम & gt; .txt । तो, उदाहरण फ़ाइल host1.txt ऊपर बन जाएगा:
/root/.bashrc
/etc/hosts
/bin/true
/sbin/rtmon
मैंने ऐसा करने के लिए निम्नलिखित बैश स्क्रिप्ट लिखी है:
#!/bin/bash
set -o nounset
set -o errexit
set -o pipefail
while read -r ONE_PATH
do
for ONE_FILE in host1.txt host2.txt host3.txt
do
sed -i '\:'"$ONE_PATH"':d' "$ONE_FILE"
done
done < common.txt
मुझे एक मुश्किल समय मिल रहा है ताकि सही सेड कमांड मिल सके। खाली होने पर संचालित सभी फाइलों में परिणाम ऊपर दिखाया गया है।
अपने लक्ष्य को पूरा करने के लिए मैं इसे कैसे ठीक कर सकता हूं?
sed '\:^/etc$:d' host1.txt
? यदि कोई। नीचे दवे के उत्तर में एक बिंदु है। common.txt
है /etc
, उस लाइन के कारण /etc/hosts
host1.txt से भी हटा दिया जाएगा, sed
इसमें शामिल सभी लाइनें हटा दी जाएंगी /etc
अपने पते के अनुसार। इससे बचने के लिए लंगर लगाएं।
grep -v -f common.txt somefile.txt
की सामग्री हैsomefile.txt
बिना किसी लाइन के जिसमें एक लाइन होती हैcommon.txt
।