我正在嘗試使用腳本回圈遍歷原始串列,然后洗掉一些單詞(行)并將其放入最終串列中。
#! /bin/sh
while read p; do
sed -e "s/$p//g" domains > finaldomains
done <exclude
這是檔案包含的內容:
rawlist:
測驗
test2
排除
exclude2
excludewords:
排除
exclude2
uj5u.com熱心網友回復:
出于性能原因,請勿sed在 shell 回圈中使用。您可以一次通過每個檔案完成此任務,而不是處理檔案N次
用 awk
awk '
NR == FNR {excluded[$0]; next}
{
for (word in excluded)
if ($0 ~ word)
print
}
' exclude domains > finaldomains
或 grep
grep -vwFf exclude domains > finaldomains
我假設您想在進行“排除”匹配時從“域”中洗掉行。
uj5u.com熱心網友回復:
由于您使用的是sed,這是另一種方法 - 它并不比提供的解決方案更好awk,但有時向盒子添加一個工具會很好,可以這么說。
$: sed 's.^./.; s.$./d;.;' exclude>lst && sed -f lst domains > finaldomains && cat finaldomains
test
test2
那是做什么的:'s.^./.; s.$./d;.;'`` adds / to the beginning and/ d; to the end of each line (make sure there are no unwanted spaces &c...), turning that list *into* a sed script that excludes those lines.sed -f lst` 根據您的輸入運行生成的腳本檔案。
uj5u.com熱心網友回復:
...
done <exclude
exclude也許是一個有排除詞的檔案..?我更改了檔案名。exclude->excludes.txt
- 你用過
>。所以在回圈中,每個sed命令都使用原始檔案并覆寫以前的finaldomains檔案。剛剛添加了 sed 選項i,然后它只更新finaldomains回圈中的一個檔案 - 即使每個 sed 命令都正確執行,也可能存在重疊的單詞,例如 (' exclude ', ' exclude 2')。所以我用 $p 包裹起來
<>以找到完全相同的行
#! /bin/sh
cp domains finaldomains
while read p; do
echo $p
sed -i "s/\<$p\>//g" finaldomains
done < excludes.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/453369.html
標籤:重击
下一篇:用AWK替換整個單詞
